2017-07-17 39 views
0

我需要能夠檢查使用bash的文件目錄中是否存在具有某個字符串的文件名。在這個例子中,我想檢查是否有包含日期​​20171101在其文件名的文件:檢查文件是否存在使用完整路徑和通配符作爲文件名bash

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

當我在目錄內使用find *20171101*它返回一個包含該日期的文件。但是,當我在完整路徑上嘗試相同的方法時,出現binary operator expected錯誤。這既適用於-e又適用於查找。

我需要的是能夠使用通配符和完整路徑呼應真/假當條件滿足搜索文件。可以有多個文件,但當至少找到一個符合條件的文件時,它應該返回true。此外我需要執行它在1行。謝謝!

回答

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

引用對防止shell在當前目錄中展開它很重要。您需要使用test -n,因爲單獨的find不會告訴您它是否找到匹配項。當head -1找到匹配時停止,所以你不會浪費時間尋找更多。

+0

在不同的路徑名和通配符上對它進行測試。奇蹟般有效。謝謝! – cf2

相關問題