2008-09-18 28 views

回答

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

的-Z是指用零(\ 0)的文件名後輸出(所以空間不能用作定界符) 。

xargs -0 

表示將\ 0解釋爲分隔符。

然後

-I{} mv {} DIR 

手段代替{}與文件名,所以你得到mv filenames DIR

+1

謝謝,首都 - 我應該小寫我的xargs – user17582 2008-09-18 12:49:08

0

您可以通過使用 grep ...將結果傳遞給下一個命令。 xargs mv {}目的地

查看man xargs瞭解更多信息。

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 
16

這種替代的作品,其中xargs的沒有速效:

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

這是我的Fedora Core 12使用:

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

也許這將工作:

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

工作完美的我:

  • 將包含文字MYSTRINGTOSEARCH的文件移動到目錄MYDIR。

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

我希望這有助於

2

這是幫助我:

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

當然,我已經所需的文件夾中(這就是爲什麼./),並將它們轉移到鄰近的文件夾。但是您可以將它們更改爲任何路徑。

我不知道爲什麼接受的答案不起作用。此外,我沒有空格和文件名中的特殊字符 - 也許這不起作用。

這裏被盜:Grep command to find files containing text string and move them

1
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path> 

假定grep的你寫的回報你期待中的文件路徑。

相關問題