Questo è quello che uso in Fedora Core 12:
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
Se vuoi trovare e spostare i file che non corrispondono al tuo schema (sposta i file che non contengono 'Subject \[SPAM\]'
in questo esempio) utilizzare:
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
-Z significa output con zeri (\0) dopo i nomi dei file (quindi gli spazi non sono usati come delimitatori).
xargs -0
significa interpretare \0 come delimitatori.
Il -L significa trovare i file che non corrispondono al modello. Sostituisci -L
con -l
se vuoi spostare i file che corrispondono al tuo schema.
Poi
-I{} mv {} DIR
significa sostituire {}
con i nomi dei file, quindi ottieni mv filenames DIR
.
Questo è ciò che mi ha aiutato:
grep -lir 'spam' ./ | xargs mv -t ../spam
Ovviamente ero già nella cartella richiesta (ecco perché ./
) e li ho spostati nella cartella adiacente. Ma puoi cambiarli in qualsiasi percorso.
Non so perché la risposta accettata non abbia funzionato. Inoltre non avevo spazi e caratteri speciali nei nomi dei file - forse questo non funzionerà.
Rubato qui:comando Grep per trovare file contenenti stringhe di testo e spostarli
Questa alternativa funziona dove xargs non è disponibile:
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done