Domanda

Sto usando grep per generare un elenco di file che ho bisogno di spostare:

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

Come faccio a passare questo elenco per il comando mv e spostare i file da qualche altra parte?

È stato utile?

Soluzione

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

La -Z uscita con zeri (\0) dopo i nomi dei file (in modo che gli spazi non sono utilizzati come delimitatori).

xargs -0

significa interpretare \ " 0 " per essere delimitatori.

Quindi

-I{} mv {} DIR

significa sostituire {} con i nomi dei file, in modo che si ottiene mv filenames DIR.

Altri suggerimenti

Questa alternativa in cui lavora xargs non è availabe:

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

Questo è quello che io uso Fedora Core 12:

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

Questo è quello che mi ha aiutato:

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

Naturalmente, ero già in cartella (che è il motivo ./) e ha mosso i loro vicini cartella.Ma si può cambiare a tutti i percorsi.

Non so perché ha accettato di rispondere non ha funzionato.Anche io non ho spazi e caratteri speciali nei nomi di file - forse questo non funzionerà.

Rubato qui: Comando Grep per trovare i file che contengono la stringa di testo e spostarli

Forse questo lavoro:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>

Supponendo che il grep hai scritto restituisce il file di percorsi ci si aspetta.

Ci sono diversi modi, ma qui è un lento, ma failsafe uno :

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

Lavoro perfetto, mi fo :

  • spostare i file che contengono il testo con la parola MYSTRINGTOSEARCH directory DIR.

    trovare .-type f -exec grep -il 'MYSTRINGTOSEARCH' {} \;-exec mv {} MYDIR/ \;

Spero che questo aiuta

È possibile passare il risultato di un comando successivo utilizzando grep ...| xargs mv {} di destinazione

Controllare l'uomo xargs per ulteriori informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top