type opción para filtrar resultados
find acepta el type opción para seleccionar, por ejemplo, solo archivos.
find /path/to/files -type f -mtime +10 -delete
Omite -delete para mostrar lo que eliminaría y, una vez que lo haya verificado, continúe y ejecute el comando completo.
Eso solo se ejecutaría en archivos, no en directorios. Usa -type d por el contrario, listar solo los directorios que coincidan con sus argumentos.
Opciones adicionales
Es posible que desee leer man find , ya que hay algunas opciones más que podría necesitar en el futuro. Por ejemplo, -maxdepth le permitiría restringir solo los elementos encontrados a una profundidad específica, p. -maxdepth 0 no se repetiría en subdirectorios.
Algunos comentarios
-
Me pregunto cómo el comando habría eliminado una carpeta, ya que no puede eliminar una carpeta con
rmsolamente. Necesitaríasrm -rpor eso. -
Además,
/path/to/files*es confuso. ¿Quiso decir/path/to/files/? ¿O espera que el comodín se expanda a varios nombres de archivos y carpetas? -
Pon el
{}entre comillas simples, es decir,'{}'para evitar que el shell interprete el nombre del archivo/directorio sustituido, al igual que protegemos el punto y coma con una barra invertida.
Como en las respuestas anteriores (+1 para ambos) el truco es usar -type f predicado.
Tenga en cuenta que en lugar de -exec rm '{}' también puedes usar -delete predicado. Pero no hagas eso. Con -exec rm '{}' puedes (y debes) primero hacer -exec echo rm '{}' para verificar que esto es realmente lo que quieres. Después de eso, vuelva a ejecutar el comando sin el echo .
Usando -delete es más rápido (sin fork() adicional y execve() para cada archivo), pero esto es arriesgado porque -delete funciona también como una condición, entonces:
# delete *.tmp files
find . -type f -name '*.tmp' -delete
pero si SOLO intercambias argumentos:
# delete ALL files
find . -type f -name '*.tmp' -delete
Si alguna vez necesitas find y rm para trabajar más rápido con toneladas de archivos, consulte el find ... | xargs ... rm Idioma UNIX.