2015-09-16 64 views
0

我有這樣的bash腳本:如何在目錄及其子目錄中的每個文件上運行bash腳本?

#!/bin/bash 
    if [ $(egrep -c "(% url+)([0-9a-z_:]+)" 'test.txt') -gt 2 ]; then 
     echo true 
     exit 1 
    else 
     echo false 
     exit 0 
    fi 

而我在test.txt測試它,但我怎麼在目錄中的每個文件運行它和它的子目錄?如果我只是嘗試這樣的事:

#!/bin/bash 
    if [ $(egrep -c "(% url+)([0-9a-z_:]+)" '~/Documents/somefolder/targetfolder/') -gt 2 ]; then 
     echo true 
     exit 1 
    else 
     echo false 
     exit 0 
    fi 

這顯然不工作,給我下輸出:

egrep: ~/Documents/somefolder/targetfolder/: No such file or directory 
./run.sh: line 2: [: -gt: unary operator expected 
false 

所以,我怎麼可以運行我的目錄中的每個文件的腳本,即使它位於子目錄中?

+0

退出狀態應該是什麼? 1如果任何文件有2個匹配項,或1個,如果所有文件都有2個匹配項? (另外,您可能希望使用'echo true'退出0,以符合約定0表示成功,非0意味着失敗。) – chepner

+0

如果任何內容與模式匹配,則需要返回退出代碼1。更多信息:http://stackoverflow.com/questions/32612068/how-to-find-positive-matches-of-regex-in-the-directory-and-return-needed-exit-co 2+比賽只是一個測試值 – Tachi

+0

你確定'〜/ Documents/somefolder/targetfolder /'實際存在嗎? – Samuel

回答

1

你應該能夠做到你有什麼什麼find

find . -type f -exec script.sh {} \; 

的空間,尾部的反斜槓和分號都是很重要的。這個find命令查找所有等於或低於的文件。然後在它們每個上執行script.sh,將它作爲參數運行的當前文件傳遞給它。例如,下面的命令會給你一個層次的每個文件的單詞數通過對每個文件運行wc命令:

find . -type f -exec wc {} \; 
0

眼前的問題是,~不會得到引號內擴展。

相關問題