Supongamos que quiero eliminar todos los archivos de una carpeta que tengan más de 1 MB.
$ find . -size +1M | xargs -0 rm
Esto no eliminará archivos que tengan espacio en sus nombres. Entonces quiero que cite todos los argumentos que envía rm
. Si lo find
da, Some report.docx
debería pasar "Some report.docx"
a rm
.
¿Cómo puedo hacer eso?
xargs
. Además, como sugiere el wiki, no lo usexargs
sin pasar el-print0
afind
.xargs -d$'\n'
para limitar el delimitador a solo nuevas líneas (y no espacios; esto no procesaría comillas, etc. especialmente - He comprobado en un sistema GNU) - la respuesta dada en stackoverflow.com/a/33528111/94687Respuestas:
Uso simple:
Si insiste en usar
xargs
yrm
confind
, simplemente agregue-print0
su comando:Otra manera:
De
man find
:fuente
"Some report.docx"
arm
menos que el nombre del archivo contenga las comillas. Lo que quieres es pasarSome report.docx
sin ser molestadorm
. La respuesta de KasiyA (ahora) muestra la forma general de hacerlofind
. [KasiyA: perdón por el ping equivocado antes.]$0
y$1
etcxargs -0
lugar dexargs -r0
.La opción
-0
dexargs
significa que la salida de la tubería se interpreta como elementos terminados en nulo. En tal caso, también debe crear una entrada para la tubería confind ... -print0
.fuente
Tenía un requisito similar y terminé usando el
-I
interruptor para tener un marcador de posición y pude citarlo.fuente