Solución 1:
Generalmente encuentro que usar el -exec
opción para find
ser más fácil y menos confuso. Prueba esto:
find . -name vmware-*.log -exec rm -i {} \;
Todo después de -exec
se toma como un comando a ejecutar para cada resultado, hasta el ;
, que se escapa aquí para que se pase a find
. El {}
se reemplaza con el nombre de archivo que find
normalmente imprimiría.
Una vez que hayas verificado que hace lo que quieres, puedes eliminar el -i
.
Solución 2:
Si tienes GNU find
puedes usar el -delete
opción:
find . -name "vmware-*.log" -delete
Para usar xargs
y evita el problema de los espacios en los nombres de archivo:
find . -name vmware-*.log -print0 | xargs -0 rm
Sin embargo, sus archivos de registro no deben tener espacios en sus nombres. Es probable que los documentos de procesamiento de texto y los archivos MP3 los tengan, pero debería poder controlar los nombres de sus archivos de registro.
Solución 3:
Puedes decirle a find
para delimitar la lista de salida con valores NULL y xargs
para recibir su lista de entrada igual:
$ ls -l "file 1" "file 2"
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 2
$ find . -name 'file *' -print0 | xargs -0 ls -l
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 2
$ find . -name 'file *' -print0 | xargs -0 rm -v
removed `./file 2'
removed `./file 1'
Además, asegúrese de escapar del *
, ya sea con una barra invertida o conteniendo el vmware-*.log
entre comillas simples, de lo contrario, su shell puede intentar expandirlo antes de pasarlo a find
.
Solución 4:
No olvides el -delete
del hallazgo opción. Elimina el archivo sin error con caracteres especiales...