Tengo una lista de directorios en un archivo de texto y cada uno de ellos debe eliminarse. ¿Cómo puedo leer esa lista en el comando ( rm -ro rmdir)?
2
La solución "más correcta" sería la siguiente:
xargs -I{} rm -r {} < files
Esto llama rm -r, donde {}se reemplaza con el nombre del archivo.
¿Por qué? La canalización de archivos con espacios xargsdará como resultado argumentos incorrectos. Digamos que su lista de archivos se ve así:
/path/to/file 1
/path/to/file_2
Luego xargs rm -r < list.txtintentaría eliminar /path/to/file, 1y /path/to/file_2. Definitivamente no es lo que quieres. Siempre tenga en cuenta los espacios en las rutas al canalizar desde y hacia comandos UNIX / Linux.
-I{}haciendo aquí? Los documentos dicen "reemplazar cadena". Además, ¿funciona esto si las rutas de archivo de la lista de eliminación tienen espacios en ellas?< filesmarcasxargsreciben la lista de archivos como entrada estándar. Luego, llama al argumento inicial,,rm -ren cada línea (= nombre de archivo) recibida. Con la-Iopción, la división se realiza en base a nuevas líneas en lugar de espacios, lo que significa que esta operación es segura para rutas de archivos con espacios en ellas. No entiendo tu otro comentario.cat files | tr '\n' '\0' | xargs -0 rm -r- esto reemplaza las nuevas líneas con caracteres nulos ASCII.xargsluego llamarárma cada una de las líneas recibidas por separado.suponiendo que tenga rutas con espacios en el archivo list.txt: una ruta por línea. Entonces, la siguiente forma de invocar xargs preservará los espacios:
fuente