使用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 / \;
我希望这有帮助