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
)?
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
)?
Respuestas:
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.
< files
marcas xargs
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.
-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?