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 rmfunciona para archivos de dos palabras?Respuestas:
Puedes decir
findyxargsusar ambos terminadores nuloso (más simple) use la
-deleteacción integrada defindo (gracias @kos)
cualquiera de los cuales debe respetar el
ARG_MAXlímite del sistema sin la necesidad dexargs.fuente
ARG_MAXque también mencionaré quefind . -name "*.txt" -exec rm {} \;sería un "tiro seguro"-print0debe 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 rmfuente
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' rmFuente de respuesta en SO .
fuente
-0lugar de-d(paraxargs) los sistemas BSD. ¿Qué usa Ubuntu? La respuesta aceptada aquí utiliza-0. ¿Que es correcto?