He encontrado el comando para eliminar archivos de más de 5 días en una carpeta
find /path/to/files* -mtime +5 -exec rm {} \;
Pero, ¿cómo hago esto también para subdirectorios en esa carpeta?
files
find
rm
timestamps
Peluche291
fuente
fuente
find /path/to -type d -empty -delete
rm test one
. (Que eliminará un archivo llamado "prueba" y un archivo llamado "uno", pero no un archivo llamado "prueba uno"). Sugerencia: -delete or -print0find
para evitar problemas con caracteres especiales, como se menciona en la primera línea de la respuesta. Por ejemplo:find /path/to/files/ -exec somecommand '{}' \;
Respuestas:
Tenga cuidado con los nombres de archivos especiales (espacios, comillas) cuando vaya a rm.
Existe una alternativa segura: la opción -delete :
Eso es todo, no hay llamadas rm separadas y no necesita preocuparse por los nombres de los archivos.
Reemplace
-delete
con-depth -print
para probar este comando antes de ejecutarlo (-delete
implica-depth
).fuente
-type f
para eliminar archivos solamente (y mantener subdirectorios)find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete
?find
argumento es un filtro que utiliza el resultado del filtro anterior como entrada. Así que asegúrese de agregar -delete como último argumento. IE:find . -delete -mtime +5
eliminará TODO en la ruta actual.Tenga en cuenta que este comando no funcionará cuando encuentre demasiados archivos. Producirá un error como:
Lo que significa que se excedió el límite de la llamada del sistema ejecutivo en la longitud de una línea de comando. En lugar de ejecutar rm de esa manera, es mucho más eficiente usar xargs . Aquí hay un ejemplo que funciona:
Esto eliminará todos los archivos (tipo f) modificados hace más de 14 días en / root / Maildir / recursivamente desde allí y más profundo (profundidad 1). Consulte el manual de búsqueda para obtener más opciones .
fuente
find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
Es lo mismo. Solo tiene que proporcionar el directorio principal en lugar del prefijo de los archivos. En su ejemplo, sería:
Esto eliminará todos los archivos con más de 5 días de antigüedad
/path/to
y sus subdirectorios.Para eliminar subdirectorios vacíos, consulte el comentario de @Costas arriba.
fuente
+
en ese caso. - 2) mejor escribir-exec rm '{}' +
para defenderse del mal de los archivos con caracteres especiales (espacios, líneas nuevas, etc.) en su nombre.fuente