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

クラウディア 
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] より新しい
ハイスピードプラン