Bashでファイルやディレクトリの存在を確認する
“if test”による確認方法
ファイルやディレクトリの存在を確認するには、以下の構文を利用する。
1 2 3 4 5 | if [ -e パス ]; then # 存在する場合 else # 存在しない場合 fi |
「パス」の部分に、チェックしたいファイルやディレクトリのパスを指定。(実際は、testコマンドが実行される)
ファイル”test.txt”と、ディレクトリ”testdir”を用意。
1 2 | -bash-3.2$ ls testdir test.txt |
以下、サンプル。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/bash file=test.txt dir=testdir # File existence check if [ -e $file ]; then echo "$file found." else echo "$file NOT found." fi # Directory existence check if [ -e $dir ]; then echo "$dir found." else echo "$dir NOT found." fi |
実行結果。
1 2 3 | -bash-3.2$ ./test_check1.sh test.txt found. testdir found. |
ファイルかディレクトリかの確認
パスで指定される内容が、ファイルなのか、ディレクトリなのかをチェックすることも可能。
オプション | チェックの内容 |
---|---|
-f | パスで指定される内容がファイルかどうか |
-d | パスで指定される内容がディレクトリかどうか |
以下、サンプル。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/bin/bash file=test.txt dir=testdir # "test.txt" Check whether the file if [ -f $file ]; then echo "$file is a file." else echo "$file is NOT a file." fi # "testdir" Check whether the file if [ -f $dir ]; then echo "$dir is a file." else echo "$dir is NOT a file." fi # "test.txt" Check whether directory if [ -d $file ]; then echo "$file is a directory." else echo "$file is NOT directory." fi # "testdir" Check whether directory if [ -d $dir ]; then echo "$dir is a directory." else echo "$dir is NOT a directory." fi |
実行結果。
1 2 3 4 5 | -bash-3.2$ ./test_check2.sh test.txt is a file. testdir is NOT a file. test.txt is NOT directory. testdir is a directory. |
感嘆符(!)を使うと、真偽を反転できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash file=test.txt if [ ! -e $file ]; then echo "$file NOT found." else echo "$file found." fi if [ ! -f $file ]; then echo "$file is NOT a file." else echo "$file is a file." fi |
実行結果。
1 2 3 | -bash-3.2$ ./test_check3.sh test.txt found. test.txt is a file. |
ワイルドカードを指定してファイルを確認
ファイル名にワイルドカードを指定して、ファイルを確認したい場合(例えば、”.txt”という拡張子を持つファイルが存在するか?など)。
以下、サンプル。
1 2 3 4 5 6 | #!/bin/bash if ls *.txt > /dev/null 2>&1 then echo "exists" fi |
“*.txt”に該当するファイルが存在する場合、”ls *.txt”は何らかの文字列を返す為、if文の判定は「真」となる。
“*.txt”に該当するファイルが存在しない場合はエラーが発生し、”/dev/null”にリダイレクトされる。
実行結果。
1 2 | -bash-3.2$ ./test_check4.sh exists |