我有這個find命令:for循環的結果, 「查找」 命令
$ find . -name '*.jar' -exec grep -Hls BuildConfig {} \;
我需要爲命令的每個結果執行這個命令可以找到以上:
$ zip -d RESULTPATH "*/BuildConfig.class"
所以我可以做這與循環或不循環?我可以創建.sh文件來做我需要的嗎? 謝謝!
我有這個find命令:for循環的結果, 「查找」 命令
$ find . -name '*.jar' -exec grep -Hls BuildConfig {} \;
我需要爲命令的每個結果執行這個命令可以找到以上:
$ zip -d RESULTPATH "*/BuildConfig.class"
所以我可以做這與循環或不循環?我可以創建.sh文件來做我需要的嗎? 謝謝!
grep
命令有兩個通道用於輸出信息。第一個也是最明顯的一個當然是stdout
,它發送它找到的匹配。但是,如果它發現沒有匹配,它也使用退出值> 0來通知您。與-q
(安靜)選項結合使用時,可以將它作爲一個更智能的選項find
:
$ find . -name '*.jar' -exec zgrep -sq BuildConfig {} \; -exec zip -d {} "*/BuildConfig.class" \;
這是假設你想通過使用grep -Z
,當然壓縮文件進行搜索。 :)
或者以方便您閱讀:
find . -name '*.jar' \
-exec zgrep -sq BuildConfig {} \; \
-exec zip -d {} "*/BuildConfig.class" \;
查找,以便在每次測試運行。您可以將這些選項看作一系列過濾器; -name
選項是第一個過濾器,並且如果先前的-exec
沒有錯誤退出,則文件只會傳遞到第二個-exec
。
謝謝!你救了我的命 – user269721
乾淨的方式來運行一個grep
命令的每個結果將命令與xargs
,使用-Z
或--null
標誌與grep
使由空終止的結果,並且-0
標誌與xargs
使得它預計值終止通過空,像這樣:
find . -name '*.jar' -exec grep -Z BuildConfig {} \; | xargs -0 zip -d RESULTPATH "*/BuildConfig.class
我刪除了Hls
標誌,因爲他們似乎都在你的使用情況毫無意義的(甚至是有害的)。
但我怕這會不會實際上是爲你工作的情況下, 因爲.jar
文件通常是一個二進制文件(Java類的壓縮文檔), 所以我不認爲grep
永遠不會匹配任何內容。您可以嘗試在罐子內搜索zgrep。
它仍然會包含目錄的純文本名稱。 – 123
相關:https://stackoverflow.com/q/9612090/1531971 – jdv
RESULTPATH旨在成爲「find命令」所標識的每個文件嗎?另外,'.jar'文件是一個zip文件。你的意思是'grep -z'?另外,你的'zip'行上的引號是什麼? – ghoti
是的,在resultpath的位置必須是find命令找到的路徑。缺少引號 – user269721