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 -r
o 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 xargs
dará 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.txt
intentaría eliminar /path/to/file
, 1
y /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?< files
marcasxargs
reciben la lista de archivos como entrada estándar. Luego, llama al argumento inicial,,rm -r
en cada línea (= nombre de archivo) recibida. Con la-I
opció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.xargs
luego llamarárm
a 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