、などの動的名前とバージョンを持つファイルがありますAbc.1.0.zip
。Abc.2.0.zip
バージョンに関係なくファイルが存在することを確認したいと思います。頑張った
find -name "Abc(.*).zip"
しかし、これは正規表現を考慮しません。また、find
結果を取得し、数が1より大きいことを確認し、その変数を条件に使用できます。
シェルスクリプトでこのように1行にブール値を返す簡単な方法はありますかfileExists Abc.1.0.zip
?
答え1
find(GNU) に正規表現を使用させるには、次の-regex
オプションを使用する必要があります。
find . -regex ".*Abc.[0-9]+.[0-9]+.zip"
また、-regextype
オプションを使用して、さまざまな正規表現タイプを参照できます。-regex
有効なタイプは次のとおりです。'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix-extend', 'posix-minimal-basic', 'sed'.
を使用すると、find
オプションを使用して見つかった各ファイルに対してコマンドを実行できます-exec
。したがって、ファイルが見つかると、指定したコマンドが実行されます。
前任者:
$ find . -regex ".*Abc.[0-9]+.[0-9]+.zip" -exec file {} \;
./Abc.1.0.zip: Zip archive data, at least v2.0 to extract
./Abc.2.0.zip: Zip archive data, at least v2.0 to extract
ファイルがシェルにあるかどうかをテストするには、次のコマンドを使用します。
[[ -f "Abc.1.0.zip" ]] && echo "File exists" || echo "File Not Exists"