[英]Grep and Copy - Bash Scripting
我正在嘗試對在目標中復制的文件進行 grep、復制和重命名。 因此,基本上我想在目錄中查找包含某個字符串的文件,並在使用 grep 找到匹配項時復制這些文件,並在復制后重命名它們。 我已經閱讀了很多,但我似乎無法弄清楚。 這是我的腳本
for file in $(grep -R 'myname' /searchdirectory)
do
cp -t $file /destinationfolder
done
這似乎不起作用。 一旦我弄清楚了這一點,那么我需要弄清楚如何重命名。 任何援助將不勝感激。
你有幾個選擇。 在大多數現代系統上,您可以使用 xargs:
grep -l --null "$pattern" "$srcPath" |
xargs -0 -I{} cp {} "$destPath"
在任何符合 POSIX 標准的系統上,您都可以使用find
:
find "$srcPath" -maxdepth 1 -type f -exec grep -q "$pattern" {} \; \
-exec cp {} "$destPath" +
你的方法有兩個錯誤:
-l
標志來grep
。使用grep -l
而不是簡單的grep
命令。
您正在使用簡單的grep
命令,它列出了文件名和輸出。 但是如果你使用-l
選項,那么它只列出文件名,然后你可以將它們復制到for
循環中。
for file in $(grep -l -R 'myname' /searchdirectory)
do
cp -t $file /destinationfolder
done
這是給你的 1-liner:
ls | grep 'pattern' | xargs -i cp {} /path/to/destination
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.