長話短說,我得到了一個包含近 800,000 個 php 檔案的資料夾。我想在每個文件中搜尋一個字串,如果該文件中存在該字串,則該文件將複製到另一個目錄。
這可以從終端進行嗎?
到目前為止我得到了:
grep -i -n -r 'ppr-1792' * | cp $1 move_to_here
但這顯然行不通。 $1 需要是包含符合文字的檔案名稱。
我該怎麼辦?
答案1
您可以使用 for 迴圈並測試 grep 的回傳程式碼,或使用grep -c
(count matches) 並查看符合計數是否大於 1。
例如
for i in *
do
grep -i -n 'Power' "$i"
if [ "$?" -eq 0 ]
then
cp "$i" mvd
fi
done
答案2
您可以使用漂亮的襯裡輕鬆完成此操作:
grep -l -i -r -Z pattern | xargs -0 -I source cp source /target
一些評論它是如何工作的。如果檔案中存在匹配項,Grep 的 -l 選項僅列印檔案名,因此它會產生要複製的檔案清單。 Xargs 指令為每個複製指令建構一個指令並執行它。 Xargs 將名為「source」的參數替換為從標準輸入讀取的檔案名稱。檔案名稱中的空格和其他有趣字元由 -Z 和 -0 選項處理。