Toto používám ve Fedora Core 12:
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
Pokud chcete najít a přesunout soubory, které neodpovídají vašemu vzoru (přesunout soubory, které neobsahují 'Subject \[SPAM\]'
v tomto příkladu) použijte:
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
-Z znamená výstup s nulami (\0) za názvy souborů (takže se jako oddělovače nepoužívají mezery).
xargs -0
znamená interpretovat \0 jako oddělovače.
-L znamená najít soubory, které neodpovídají vzoru. Nahraďte -L
s -l
pokud chcete přesunout soubory, které odpovídají vašemu vzoru.
Potom
-I{} mv {} DIR
znamená nahradit {}
s názvy souborů, takže dostanete mv filenames DIR
.
Tohle mi pomohlo:
grep -lir 'spam' ./ | xargs mv -t ../spam
Samozřejmě jsem již byl v požadované složce (proto ./
) a přesunul je do sousední složky. Můžete je však změnit na libovolné cesty.
Nevím, proč přijatá odpověď nefungovala. Také jsem neměl mezery a speciální znaky v názvech souborů - možná to nebude fungovat.
Ukradeno zde:Příkaz Grep k vyhledání souborů obsahujících textový řetězec a jejich přesunutí
Tato alternativa funguje tam, kde xargs není k dispozici:
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done