2017-07-17 11 views
0

bashを使用してファイルのディレクトリ内に特定の文字列のファイル名が存在するかどうかを確認する必要があります。ファイル名が完全パスとワイルドカードであることを確認するbash

[ -e "/path/to/data/dir/*20171101*" ] && echo true || echo false 

私はディレクトリ内find *20171101*を使用する場合、それはその日付を含むファイルを返します。この例では、私は彼らのファイル名に日付20171101を含むファイルがあるかどうかを確認します。しかし、フルパスで同じ方法を試すと、binary operator expectedエラーが発生します。これは-eとfindの両方のためです。私は必要なもの

は、ワイルドカードととは、条件が満たされたとき真/偽エコー完全なパスを使用してファイルを検索できるようにすることです。複数のファイルが存在する可能性がありますが、条件を満たすファイルが少なくとも1つ見つかるとtrueを返します。さらに、私はを1行で実行する必要があります。ありがとう!

答えて

1
[ -n "$(find /path/to/data/dir -name '*20171101*' | head -1)" ] && ... 

引用符は、シェルが現在のディレクトリで展開しないようにするために重要です。 findだけでは一致するかどうかは分かりませんので、test -nを使用する必要があります。 head -1は一致するものが見つかると停止しますので、時間を浪費することはありません。

+0

異なるパス名とワイルドカードでテストしました。魅力のように動作します。ありがとう! – cf2

関連する問題