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