2010-11-22 74 views
1

我對shell腳本相當陌生,因此請放心,因爲我知道這很可能是真正基本的東西。我的問題是,我需要編寫一個腳本來查看一個目錄,並告訴我它是否與我在文件名中指定的字符串匹配。這將是一個例子。列出目錄並找到名稱中包含某些字符串的文件

我有一個名爲tmp的目錄。在那個目錄裏面是名爲tmp-a,temp-a,temporary-a等的文件。如果腳本查看目錄並且看到有一個文件名字符串爲'tmp'或'temp',它應該繼續該腳本,但如果它沒有看到任何匹配shell腳本中指定的字符串的文件名,它應該退出。我基本上是在尋找一個有條件的'if [-f filename]'可以應用'或'的語句。

我希望這是有道理的,並一如既往,在此先感謝。

+0

啊,謝謝。如上所述,這很容易。我從來沒有看過grep上的-e開關。對不起,浪費你的時間。再次感謝並祝你有美好的一天。 – Tim 2010-11-22 20:19:39

回答

2

模式tmp*擴展到文件名稱以tmp,或由字面模式本身,如果沒有匹配的文件中的單個單詞列表列表。

set -- 
for pattern in 'tmp*' 'temp*'; do 
    set -- $pattern "[email protected]" 
    if [ ! -e "$1" ]; then shift; fi 
done 
if [ $# -eq 0 ]; then 
    echo "No matching file" 
else 
    for x in "[email protected]"; do …; done 
fi 

在bash中,您可以請求將沒有文件匹配的模式擴展爲空列表,這可以簡化很多事情。

shopt -s nullglob 
set -- tmp* temp* 
if [ $# -eq 0 ]; then … 

對zsh也是這樣,它允許按照模式設置它。

set -- tmp*(N) temp*(N) 
if [ $# -eq 0 ]; then … 

如果你想遞歸搜索目錄裏面,你可以使用find命令。

if [ -n "$(find -name 'tmp*' -o -name 'temp*' | head -c 1)" ]; then 
    # there are matching files 
fi 
相關問題