Normalmente para eliminar archivos con espacios en su nombre de archivo, debería ejecutar:
$ rm "file name"
pero si quiero eliminar varios archivos, por ejemplo:
$ find . -name "*.txt" | xargs rm
Esto no eliminará archivos con espacios en ellos.
command-line
find
rm
xargs
Ashley
fuente
fuente
find -name "*\ *.txt" | xargs rm
funciona para archivos de dos palabras?Respuestas:
Puedes decir
find
yxargs
usar ambos terminadores nuloso (más simple) use la
-delete
acción integrada defind
o (gracias @kos)
cualquiera de los cuales debe respetar el
ARG_MAX
límite del sistema sin la necesidad dexargs
.fuente
ARG_MAX
que también mencionaré quefind . -name "*.txt" -exec rm {} \;
sería un "tiro seguro"-print0
debe ser la última opción (o al menos después-name "*.txt"
), de lo contrario, esto afectará a los archivos que ya no se limitan a*.txt
...Por cierto, si usó algo más que buscar, puede usar tr para reemplazar las nuevas líneas con bytes nulos.
P.ej. La siguiente línea elimina los 10 últimos archivos modificados en un directorio, incluso si tienen espacios en sus nombres.
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
fuente
El comando xargs usa tabuladores, espacios y nuevas líneas como delimitadores por defecto. Puede decirle que solo use caracteres de nueva línea ('\ n') con la opción -d:
find . -name "*.txt" | xargs -d '\n' rm
Fuente de respuesta en SO .
fuente
-0
lugar de-d
(paraxargs
) los sistemas BSD. ¿Qué usa Ubuntu? La respuesta aceptada aquí utiliza-0
. ¿Que es correcto?