Eliminar directorios de un archivo con una lista de directorios


2

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)?

Respuestas:


4

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.


¿Qué está -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?
chovy

Nombre de archivo demasiado largo
chovy

1
Desde la página de manual: "Reemplace las ocurrencias de replace-str en los argumentos iniciales con nombres leídos de la entrada estándar". Lo más importante es que dice: "Los espacios en blanco sin comillas no terminan los elementos de entrada; en cambio, el separador es el carácter de nueva línea". Entonces, las < filesmarcas xargsreciben 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.
slhck

la lista es muy larga. si tengo más de 1000 archivos para eliminar es demasiado largo para xargs
chovy

Probablemente pueda hacer algo como esto: 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.
slhck

1

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:

cat list.txt | xargs -d \\n rm -r

esto no sufre de la lista de argumentos errores demasiado largos upvoting
chovy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.