¿Cómo ejecutar el comando en la lista de nombres de archivo en un archivo?

Respuestas:

11

Si tiene un archivo por línea, una forma de hacerlo es:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

La lista de archivos se proporciona como entrada al trcomando que cambia el separador de archivos del salto de línea al byte nulo y el xargscomando lee archivos separados por bytes nulos en la entrada y lanza el comando rm con los archivos adjuntos como argumentos.

Jonas Berlin
fuente
1
También sugiero usar en rm --lugar de solo rm, para que los nombres de archivo que pueden comenzar con el guión no se traten como rmparámetros.
artyom
No funcionó amigo ........ tr: operando extra monu.txt' Try tr --help 'para más información. rm: operando faltante Pruebe `rm --help 'para obtener más información. ........ Esto es todo lo que puedo ver
monumentos
1
¿Quizás te perdiste el <antes del nombre del archivo?
Jonas Berlin
También mejoré un poco el comando xargs, agregué, de acuerdo con la sugerencia de @artyom y agregué -r para asegurarme de que no se ejecute rm si no hay archivos para eliminar.
Jonas Berlin
5

La respuesta anterior está bien porque hace todo lo posible para manejar nombres de archivos con espacios y "caracteres extraños". Pero la forma más simple, si los nombres de archivo son sanos, es solo (¡advertencia, bashism!):

rm $(< /the/file/with/names)

Para shell normal:

rm `cat /the/file/with/names`
vonbrand
fuente