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

时间:2020-03-06 14:20:57  来源:igfitidea点击:

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

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

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

解决方案

我们可以使用将结果传递给下一个命令
grep ... | xargs mv {}目标

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

有几种方法,但是这是一种缓慢但失败的方法:

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

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

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

xargs -0

表示将\ 0解释为定界符。

然后

-I{} mv {} DIR

意味着用文件名替换" {}",因此我们将获得" mv文件名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