64

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

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

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

4

9 回答 9

86

'Subject \[SPAM\]'如果您想查找和移动与您的模式不匹配的文件(移动本示例中不包含的文件),请使用:

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

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

xargs -0

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

-L 表示查找与模式不匹配的文件。如果要移动与您的模式匹配的文件,请替换-L为。-l

然后

-I{} mv {} DIR

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

于 2008-09-18T12:14:06.947 回答
24

此替代方法适用于 xargs 不可用的情况:

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
于 2008-09-18T12:20:23.313 回答
11

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

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
于 2010-05-31T19:56:37.133 回答
7

这对我有帮助:

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

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

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

在这里被盗:Grep 命令查找包含文本字符串的文件并移动它们

于 2015-04-03T09:55:55.007 回答
4
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>

假设您编写的 grep 返回您期望的文件路径。

于 2015-09-10T10:05:18.550 回答
2

也许这会起作用:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
于 2012-02-14T10:53:35.790 回答
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
于 2008-09-18T12:12:40.977 回答
0

适合我的工作:

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

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

我希望这有帮助

于 2014-09-05T15:00:27.723 回答
-1

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

检查 man xargs 了解更多信息。

于 2008-09-18T12:04:57.000 回答