Rimuovi tutti i file che corrispondono al nome in un elenco

2

Ho una cartella con molte immagini.

Il mio cliente mi ha inviato un elenco di immagini rifiutate che devo eliminare da quella cartella.

L'elenco è simile al seguente: _001,_002,_003,_004,_006,_007,RAM08953,RAM08995,RAM08996,RAM09039,RAM09060,RAM09087,RAM09101,RAM09104,RAM09115,RAM09126,RAM09170,RAM09171,RAM09172,RAM09176,RAM09188 .

Come posso eseguire facilmente qualcosa che cancella quei file o spostare quei file in una nuova cartella o qualcosa senza fare a mano? Può essere un'app, uno script di shell o un suggerimento.

    
posta Rui Ganga 08.06.2017 - 16:15
fonte

2 risposte

0

Puoi eliminare un elenco di nomi di file separati da virgola usando un CSV usando il seguente comando:

for file in $( cat foo.csv | awk '{gsub(",","\n"); print $0}' ); do rm $file; done

Puoi renderlo più sicuro spostando il file nel Cestino anziché eliminarlo:

for file in $( cat foo.csv | awk '{gsub(",","\n"); print $0}' ); do mv $file ~/.Trash; done

Come funziona

Questo è un ciclo FOR / DO che prima prende il contenuto di foo.csv e

  • cat foo.csv | Esegue l'output dell'intero contenuto del file CSV e lo invia al successivo comando
  • awk '{gsub(",","\n"); print $0} Questa riga prende l'output del comando precedente e utilizza l'utilità di elaborazione del testo awk , quindi sostituisce la virgola ( , ) per il carattere di nuova riga ( \n ). Esegue quindi l'output di ogni elemento ( print $0 ) su una riga separata
  • ogni linea diventa un "elemento" per il ciclo FOR per iterare.
  • per ogni oggetto emetterà il comando rm $file
  • Puoi cancellare / spostare / rinominare / qualunque file modificando il comando dopo do . (Ad esempio do mv $file ~/Foo/Bar/$file per spostarlo in un'altra cartella.)
risposta data 08.06.2017 - 17:32
fonte
1

Per eliminare un elenco di nomi di file separati da virgole da una cartella, puoi utilizzare quanto segue:

tr , '\n' <<< "file.jpg,second.jpg,…" | xargs -I{} rm /path/to/folder/{}

Sostituisci file.jpg,second.jpg,… con l'elenco di file separati da virgola.
Sostituisci /path/to/folder con il percorso della cartella contenente le immagini.

tr , '\n' sostituisce le virgole nell'input con nuove linee. xargs prende le linee ed esegue il comando dato per ogni riga, sostituendo {} con ogni riga di input (come indicato da -I{} ). tr viene utilizzato poiché xargs in macOS non supporta -d per un delimitatore personalizzato.

Tuttavia, noto che il tuo elenco non include estensioni di file. Puoi invece aggiungere l'estensione alla fine del comando.

tr , '\n' <<< "file,second,…" | xargs -I{} rm /path/to/folder/{}.jpg
    
risposta data 08.06.2017 - 16:29
fonte

Leggi altre domande sui tag