Come posso spostare tutti i file in uscita da un comando?


22

Ho questo comando grep per trovare i file senza la parola Allegati in essi.

grep -L -- Attachments *

Voglio spostare tutti i file che vengono emessi da quel comando. Come posso farlo in bash? Uso una pipa? Uso un'istruzione if / then più prolissa in uno script completo?

Risposte:


18

Se sai che nessuno se i nomi dei file contengono nuove righe, schede, spazi o combinazioni glob che possono produrre una corrispondenza, questo potrebbe essere più semplice per un caso unico:

mv $(grep -L Attachments *) dest_dir

36

Quello che vuoi fare è usare un'opzione pipe and greps -Z:

Usando GNU grep e mv

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

Il -Zcombinato con xargs -0gestisce tutti i nomi di file con caratteri speciali.

Utilizzo di BSD grep e mv (come su MacOS X)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
    mv "./$file" target_directory
done

Su BSD, grep -Zsignifica decompressione , grep --nullfunziona sia su BSD che su GNU. BSD mvmanca di opzione-t

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.