GNU/Linux >> Tutoriales Linux >  >> Linux

Script Bash para eliminar archivos de más de x días con subdirectorios

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ías rm -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.


Linux
  1. ¿Cómo eliminar todos los archivos anteriores a X número de días en Linux?

  2. ¿Eliminar todos los archivos excepto en un determinado subdirectorio con Buscar?

  3. ¿Cómo crear un trabajo cron que elimine automáticamente los archivos que tienen más de 30 días?

  4. Cómo eliminar archivos de más de N días usando tmpreaper en Linux

  5. Cómo eliminar los archivos que tienen más de n días SIN utilizar el comando de búsqueda

Cómo eliminar archivos anteriores a los días especificados en Linux

¿Por qué Find -mtime +1 solo devuelve archivos de más de 2 días?

calcule el espacio total en disco utilizado por archivos de más de 180 días usando find

Elimine todos los archivos excepto los 3 más nuevos en bash script

¿Encontrar directorios con todos los archivos dentro de más de X?

Trabajo cron para eliminar todos los archivos de más de 7 días con extensión en una carpeta específica:no funciona