Quería eliminar archivos de más de 2 MB dentro de una carpeta específica. Entonces corrí:
find . -size +2M
Y obtuve una lista de dos archivos
./a/b/c/file1
./a/f/g/file2
Entonces corro:
find . -size +2M -exec rm ;
y recibo el mensaje de error Find: missing argument to -exec
Compruebo la sintaxis en la página de manual y dice -exec command ;
Así que en cambio lo intento
find . -size +2M -exec rm {} +
Y funciona. Entiendo que {} hace que ejecute el comando como en rm file1 file2
lugar de rm file1; rm file2;
.
Entonces, ¿por qué no funcionó el primero?
RESPONDER:
Supongo que solo tuve que usar RTFM un par de veces para finalmente entender lo que decía. Aunque el primer ejemplo no muestra {}, se requieren llaves en todos los casos. Y luego agrega \; o + según el método deseado. No solo lea el encabezado. Lea la descripción también. Entendido.
En aras de la eficiencia, generalmente es mejor usar xargs:
fuente
No usaría -exec en absoluto para esto. find también puede eliminar archivos en sí:
(Sin embargo, esto es probablemente un GNUismo, no sé si lo encontraría en un hallazgo que no sea GNU)
fuente
Como se documenta, -exec requiere {} como marcador de posición para la salida de find.
La guía definitiva para usar las herramientas bash y GNU está aquí
Como puede ver, muestra explícitamente el segundo comando que utilizó como ejemplo.
fuente