2013-07-16 76 views
2

我在尋找一個動作,當一個bahsscript在我的家中找到一個文件中的字符串,但不知何故它不工作,我不明白爲什麼.. 我有我的grep不會返回0的印象(而字符串確實存在於文件中)。用if語句檢查文件夾中的字符串

#!/bin/bash 
find /home/ -type f | xargs grep -q 'stringtofind' 
if [ $? == 0 ] #if the result is not equal to zero 
then 
    echo "Action" 
else 
    echo "Pas d'action" 
    exit 1 
fi 
exit 0 

當我做了以下我的殼返回我123,而不是0

find /home/anselmewebsite/ -type f | xargs grep -q 'stringtofind' ; echo $? 
shell returns : 123 

預先感謝您的亮點,

回答

2

您可以使用grep的-r選項,以使它遞歸地在文件夾中grep:

grep -r yourstring /path/to/your/folder 

man page

-R,-r,--recursive

閱讀每個目錄,遞歸下的所有文件;這相當於-d遞歸選項。

+0

非常感謝。正如我之前所說,我不知道爲什麼我使用xargs時,grep可以自己做到這一點..初學者的錯誤。再次感謝。 – Anselme

+0

@安塞爾姆沒問題。請注意,一些發行版爲'grep -r'提供'rgrep'簡寫。如果你的發行版沒有,你可以在你的.bashrc中創建一個別名:'alias rgrep =「grep -r」' – hek2mgl

+0

感謝有用的提示..確實grep -r將需要很多:) – Anselme

2

這是xargs的返回碼,如果你看看說明書,發現:

123如果命令的任何調用與狀態退出1-25

這意味着您的grep返回非零退出代碼,這是grep不匹配字符串時的情況:

通常,退出狀態爲0如果選中的行被找到,則返回1。

因此,我強烈建議您使用grep與-R遞歸選項,如果任何文件中存在匹配,則應返回0。在上面的例子中,只要一個文件不包含搜索模式,xargs將返回123,並且腳本的邏輯被破壞。

+0

非常感謝你.. 你是對的。我不知道爲什麼我使用xargs時,grep可以自己做。初學者的錯誤。再次感謝。 – Anselme

+0

@安塞爾姆,你不是「錯」,你正在學習。這是一個很好的問題。 –