シェル - シェルスクリプト - ファイルをチェックする
- 1. 概要
- 2. 演算子
- 3. ファイルの存在をチェックする
- 4. ファイルの日時を比較する
1. 概要
ファイル・ディレクトリの有無や、状態をチェックできます。
本ページは、下記のサイトを参考にさせていただきました。
「Bash の if 文(test文)のオプションを整理してみた #Linux」
2. 演算子
演算子として、下記のものがあります。
演算子 | 意 味 | 備考 |
-d | ディレクトリか | |
-f | ファイルか | |
-s | サイズが 0 より大きいか | |
-e | 存在するか | |
-r | 読み取り可能か | |
-w | 書き込み可能か | |
-x | 実行可能か | |
3. ファイルの存在をチェックする
下記の状態で。
$ ls
-rw-r--r-- 1 kitayama kitayama 0 2月 26 12:09 a.txt
drwxr-xr-x 2 kitayama kitayama 512 2月 26 12:09 c
以下のシェルスクリプトを作成して。
#!/bin/sh
F1=a.txt
F2=b.txt
D1=c
D2=d
if [ -f $F1 ]; then
echo "$F1 はあります。"
else
echo "$F1 はありません。"
fi
if [ -f $F2 ]; then
echo "$F2 はあります。"
else
echo "$F2 はありません。"
fi
if [ -d $D1 ]; then
echo "$D1 はあります。"
else
echo "$D1 はありません。"
fi
if [ -d $D2 ]; then
echo "$D2 はあります。"
else
echo "$D2 はありません。"
fi
実行すると以下の出力となります。
a.txt はあります。
b.txt はありません。
c はあります。
d はありません。
「else」でなく、ファイルが存在しなければという条件文を作成する場合は、下記のように否定の「!(not)」をつけます。
if [ ! -f $F1 ]; then
echo "$F1 はありません。"
fi
4. ファイルの日時を比較する
「-nt(newer than)」、「-ot(older than)」を使います。
下記の状態で。
$ ls -la *.txt
-rw-r--r-- 1 hogehoge hogehoge 6 1月 27 11:36 a.txt
-rw-r--r-- 1 hogehoge hogehoge 0 1月 27 11:19 b.txt
下記のスクリプトを実行すると。
#!/bin/sh
t1=`stat -f "%Sm" -t "%Y年%m月%d日 %T" $1`
t2=`stat -f "%Sm" -t "%Y年%m月%d日 %T" $2`
if [ $1 -nt $2 ]; then
echo "$1 [$t1] が $2 [$t2] より新しい"
fi
if [ $1 -ot $2 ]; then
echo "$1 [$t1] が $2 [$t2] より古い"
fi
結果はこうなります。
$ ./test01.sh a.txt b.txt
a.txt [2018年01月27日 11:36:46] が b.txt [2018年01月27日 11:19:54] より新しい
|
|