使用grep来查找文件中的内容,如果匹配,就移动它们

我正在使用grep来生成我需要移动的文件列表:

grep -L -r 'Subject: \[SPAM\]' . 

我怎样才能将这个列表传递给mv命令并将文件移动到别的地方?

 grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR 

-Z表示在文件名之后用零(\ 0)输出(因此空格不用作分隔符)。

 xargs -0 

意味着将\ 0解释为分隔符。

然后

 -I{} mv {} DIR 

意味着用文件名replace{} ,所以你得到mv filenames DIR

这种替代方法在xargs不可用的地方:

 grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done 

这是我在Fedora Core 12中使用的:

 grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR 

这是对我的帮助:

grep -lir 'spam' ./ | xargs mv -t ../spam

当然,我已经在所需的文件夹(这就是为什么./ ),并将其移动到相邻的文件夹。 但是你可以把它们改成任何path。

我不知道为什么接受的答案不起作用。 此外,我没有空格和文件名中的特殊字符 – 也许这是行不通的。

这里被盗: grep命令查找包含文本string的文件并移动它们

有几种方法,但这是一个缓慢但安全的方法:

 IFS=$'\n'; # set the field separator to line break for $mail in $(grep -L -r 'Subject: \[SPAM\]' .); do mv "$mail" your_dir; done; IFS=' '; # restore FS 

也许这将工作:

 mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file 
 mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path> 

假设你写的grep返回你期望的文件path。

您可以使用grep … |将结果传递给下一个命令 xargs mv {}目的地

检查男人xargs的更多信息。

对我完美的工作:

  • 将包含文字MYSTRINGTOSEARCH的文件移动到目录MYDIR。

    找 。 -type f -exec grep -il'MYSTRINGTOSEARCH'{} \; -exec mv {} MYDIR / \;

我希望这有帮助