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

时间:2008-09-18 12:03:46

标签: linux shell scripting grep

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

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

如何将此列表传递给mv命令并将文件移动到其他位置?

8 个答案:

答案 0 :(得分:72)

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

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

xargs -0

表示将\ 0解释为分隔符。

然后

-I{} mv {} DIR

表示使用文件名替换{},因此您获得mv filenames DIR

答案 1 :(得分:18)

此备选方案适用于xargs不可用的地方:

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:5)

这对我有所帮助:

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

当然,我已经在必需文件夹中(这就是为什么./)并将它们移动到邻近文件夹。但您可以将它们更改为任何路径。

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

在这里被盗:Grep command to find files containing text string and move them

答案 4 :(得分:2)

也许这会奏效:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

对我来说工作很完美:

  • 将包含MYSTRINGTOSEARCH字样文本的文件移至目录MYDIR。

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

我希望这会有所帮助

答案 7 :(得分:-1)

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

检查man xargs以获取更多信息。