私が推奨するソリューションの背景には、最初の仕事の2週目に、ビルドサーバーの半分を完全に消去した友人の話があります。したがって、基本的なタスクは、ファイルが存在するかどうかを確認することです。存在する場合は削除します。しかし、この川には危険な急流がいくつかあります。
すべてがファイルです。
スクリプトは、一般的なタスクを解決する場合にのみ本当の力を発揮します
一般的には、変数を使用します
手作業による介入を避けるために、スクリプトではしばしば-f forceを使用します
また、-rを再帰的に愛し、タイムリーな方法で作成、コピー、破棄するようにしてください。
次のシナリオを検討してください。
削除したいファイルがあります:filesexists.json
このファイル名は変数に保存されます
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
物事を本当に柔軟にするために、パス変数も使用します
<host>:~/Documents/thisfolderexists pathtofile=".."
<host>:~/Documents/thisfolderexists ls $pathtofile
filesexists.json history20170728 SE-Data-API.pem thisfolderexists
それで、-e
それが想定されていることを行うかどうかを見てみましょう。ファイルは存在しますか?
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
します。マジック。
ただし、ファイル変数が誤ってnuffinと評価された場合はどうなりますか?
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
何?エラーで戻るはずです...そして、これがそのフォルダ全体が誤って削除された話の始まりです
別の方法として、「ファイル」であると私たちが理解していることを具体的にテストすることもできます
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
0
したがって、ファイルは存在します...
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
1
したがって、これはファイルではなく、おそらくディレクトリ全体を削除したくない
man test
次のように言っています:
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
...
-h FILE
FILE exists and is a symbolic link (same as -L)