シェル - シェルスクリプト - ファイルをチェックする
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] より新しい
> 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 はありません。
if [ ! -f $F1 ]; then echo "$F1 はありません。" fi
> 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] より新しい