シェル - シェルスクリプト - ファイルをチェックする

クラウディア 
1. ファイルの存在をチェックする
2. ファイルの存在チェック例
3. ファイルの日時を比較する
4. ファイルの日時を比較例

1. ファイルの存在をチェックする

 ファイルの存在をチェックするには -f を使用します。  ディレクトリの存在をチェックするには -d を使用します。

2. ファイルの存在チェック例

 下記の状態で

> 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

3. ファイルの日時を比較する

 -nt(newer than)、-ot(older than) を使います。

4. ファイルの日時を比較例

 下記の状態で

> 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] より新しい