Eliminar todos los archivos que coinciden con el nombre en una lista

2

Tengo una carpeta con muchas imágenes.

Mi cliente me envió una lista de imágenes rechazadas que debo eliminar de esa carpeta.

La lista es así: _001,_002,_003,_004,_006,_007,RAM08953,RAM08995,RAM08996,RAM09039,RAM09060,RAM09087,RAM09101,RAM09104,RAM09115,RAM09126,RAM09170,RAM09171,RAM09172,RAM09176,RAM09188 .

¿Cómo puedo ejecutar fácilmente algo que elimine esos archivos, o mover esos archivos dentro de una nueva carpeta o algo sin hacerlo manualmente? Puede ser una aplicación, un script de shell o cualquier sugerencia.

    
pregunta Rui Ganga 08.06.2017 - 16:15

2 respuestas

0

Puede eliminar una lista de nombres de archivos separados por comas usando un CSV usando el siguiente comando:

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

Puede hacerlo más seguro moviendo el archivo a la Papelera en lugar de eliminarlo:

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

Cómo funciona esto

Este es un bucle FOR / DO que primero toma el contenido de foo.csv y

  • cat foo.csv | Esto genera el contenido completo del archivo CSV y lo canaliza al siguiente comando
  • awk '{gsub(",","\n"); print $0} Esta línea toma la salida del comando anterior y el uso de la utilidad de procesamiento de texto awk luego sustituye la coma ( , ) por el carácter de nueva línea ( \n ). A continuación, genera cada elemento ( print $0 ) en una línea separada
  • cada línea se convierte en un "elemento" para que el ciclo FOR se repita.
  • para cada elemento emitirá el comando rm $file
  • Puede eliminar / mover / renombrar / lo que sea cada archivo modificando el comando después de do . (Por ejemplo, do mv $file ~/Foo/Bar/$file para moverlo a otra carpeta).
respondido por el Allan 08.06.2017 - 17:32
1

Para eliminar una lista de nombres de archivos separados por comas de una carpeta, puede usar lo siguiente:

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

Reemplace file.jpg,second.jpg,… con su lista de archivos separados por comas.
Reemplace /path/to/folder con la ruta a la carpeta que contiene las imágenes.

tr , '\n' reemplaza las comas en la entrada con nuevas líneas. xargs toma las líneas y ejecuta el comando dado para cada línea, reemplazando {} con cada entrada de línea (como lo indica -I{} ). tr se usa ya que xargs en macOS no admite -d para un delimitador personalizado.

Sin embargo, observo que su lista no incluye las extensiones de archivo. Puede agregar la extensión al final del comando en su lugar.

tr , '\n' <<< "file,second,…" | xargs -I{} rm /path/to/folder/{}.jpg
    
respondido por el grg 08.06.2017 - 16:29

Lea otras preguntas en las etiquetas