簡體   English   中英

Grep 和 Copy - Bash 腳本

[英]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" +

你的方法有兩個錯誤:

  1. 您需要-l標志來grep
  2. 您沒有考慮命令替換中的空格和全局擴展,這可能是一場噩夢。

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM