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
rm
solamente. Necesitaríasrm -r
por 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.