logo

ファイルが存在するかどうかを Bash チェックする

ほとんどの場合、ファイルが存在するかどうかを確認するアクションを実行する必要がある状況が発生することがあります。

Bash では、「テスト コマンド」を使用して、ファイルが存在するかどうかを確認し、ファイルの種類を判断できます。

以下は test コマンドの構文であり、これらのコマンドのいずれかを使用できます。

 test expression [ expression ] [[ expression ]] 

スクリプトをすべての POSIX シェルに移植できるようにするには、単一の括弧 '[' コマンドを使用する必要があります。アップグレードされたバージョンのテスト コマンドには、二重括弧 '[[' が含まれており、Bash、Zsh、および Ksh をデフォルトのシェルとして使用する最新のシステムのほとんどでサポートされています。

ファイルが存在するかどうかを確認する

ファイルが存在するかどうかを確認するときに、最も一般的に使用されるファイル演算子は -e と -f です。 「-e」オプションは、タイプに関係なくファイルが存在するかどうかを確認するために使用され、「-f」オプションは、ファイルが通常のファイル(ディレクトリまたはデバイスではない)の場合にのみ真の値を返すために使用されます。

ファイルが存在するかどうかを確認する最も一般的なオプションは、「if 条件文」を指定して test コマンドを使用することです。

「read_file.txt」ファイルが存在するかどうかを確認する例を次に示します。

方法 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

方法 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

方法 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

出力

ディレクトリ内にファイル (read_file.txt) が存在するため、3 つのメソッドすべての出力は次のようになります。

Javaの数学
 read_file.txt exist 

ファイルが存在するかどうかに基づいて結果を返すアクションを実行したい場合は、次の方法で if/then 構造を使用できます。

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

出力

 read_file.txt exist 

if ステートメントを使用せずに test コマンドを使用することもできます。次のいずれかの方法を使用できます。

方法 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

方法 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

方法 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

出力

ディレクトリ内にファイル (read_file.txt) が存在するため、3 つのメソッドすべての出力は次のようになります。

 read_file.txt exist 

&& 演算子の後に実行するコマンドが複数ある場合は、コマンドをセミコロン (;) または AND (&&) で区切って中括弧で囲みます。つまり、次のようになります。

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

&& とは異なり、 || の後のステートメントは演算子は、テスト コマンドの終了ステータスが「false」の場合にのみ実行されます。

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

出力

 read_file.txt exist 

これらは、ファイルが存在するかどうかを確認するために Bash で一般的に使用される方法です。

ディレクトリが存在するかどうかを確認する

演算子「-d」を使用すると、ファイルがディレクトリであるかどうかをテストできます。

「Javatpoint」ディレクトリが存在するかどうかを確認する方法は次のとおりです。

方法 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

方法 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

注記:単一の括弧「[」の代わりに二重括弧「[[」を使用することもできます。

出力

指定された場所にディレクトリ (Javatpoint という名前) が存在するため、上記の両方のメソッドの出力は次のようになります。

 Javatpoint is a directory 

ファイルが存在しないことを確認する

テスト式は、感嘆符 (! -論理 NOT 演算子) を使用して否定できます。次の例を確認してください。

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

上記のスクリプトは次のように書くこともできます。

vlc ダウンロード youtube
 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

出力

 missing_read_file.txt unavailable 

ファイルテストオペレーター

テスト コマンドには、特定の種類のファイルをテストできる次のファイル オペレーターが含まれています。

-b ファイルを返す FILE がブロック特殊ファイルとして存在する場合は「True」。
-c ファイルを返す FILE が特殊文字ファイルとして存在する場合は「True」。
-d ファイルの戻り値 FILE がディレクトリとして存在する場合は「True」。
-e ファイルの戻り値 タイプ (ノード、ディレクトリ、ソケットなど) に関係なく、FILE がファイルとして存在する場合は「True」。
-f ファイルの戻り値 FILE が通常のファイル (ディレクトリまたはデバイスではない) として存在する場合は「True」。
-G ファイルが返される ファイルが存在し、ユーザーがコマンドを実行しているのと同じグループが含まれている場合は「True」。
-h ファイルが返される ファイルがシンボリック リンクとして存在する場合は「True」。
-g ファイルを返す ファイルが存在し、set-group-id (sgid) フラグ セットが含まれている場合は「True」。
-k ファイルを返す ファイルが存在し、スティッキー ビット フラグ セットが含まれている場合は「True」。
-L ファイルが返される ファイルがシンボリック リンクとして存在する場合は「True」。
-O ファイルの戻り値 ファイルが存在し、コマンドを実行しているユーザーが所有している場合は「True」。
-p ファイルの戻り値 FILE がパイプとして存在する場合は「True」。
-r ファイルの戻り値 FILE が読み取り可能なファイルとして存在する場合は「True」。
-S ファイルが返される FILE がソケットとして存在する場合は「True」。
-s ファイルの戻り値 ファイルが存在し、サイズがゼロ以外の場合は「True」。
-u ファイルの戻り値 ファイルが存在し、set-user-id (suid) フラグが設定されている場合は「True」。
-w ファイルを返す FILE が書き込み可能なファイルとして存在する場合は「True」。
-x ファイルの戻り値 FILE が実行可能ファイルとして存在する場合は「True」。