GNU/Linux >> Linux Esercitazione >  >> Linux

Usa grep per trovare il contenuto nei file e spostarli se corrispondono

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

Linux
  1. Come utilizzare il comando Grep per trovare testo nei file

  2. Come trovare più stringhe nei file??

  3. Trova e copia i file

  4. Trova i file e tarali (con spazi)

  5. Trovare file eseguibili usando ls e grep

Trova comando in Linux (Trova file e directory)

Grep Command in Linux (Trova testo nei file)

Come utilizzare sed per trovare e sostituire la stringa nei file

Come trovare file duplicati in Linux e rimuoverli

Trova facilmente file e directory su Linux

Trova testo nei file su Linux usando grep