GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo crear archivos tar para archivos de más de 7 días usando secuencias de comandos de shell de Linux

Reemplace su find Comando con esto e inténtalo de nuevo,

find /var/log -type f -mtime +7 

Esto funcionará:

#!/bin/bash
files=()
while IFS=  read -r -d $'\0'; do
    files+=("$REPLY")
done < <(find /var/log/ -mtime +7 -print0)
tar cvfz backup.tar.gz "${files[@]}"

Tenga en cuenta el uso de "${files[@]}" a diferencia de ${files[*]} . "${files[@]}" se expandirá para proporcionar tar con un argumento por nombre de archivo y funcionará incluso si los nombres de archivo contienen espacios, tabulaciones o saltos de línea. Por el contrario, después de que el shell se expanda ${files[*]} , dividirá las palabras, lo que podría alterar los nombres de los archivos.

Para obtener una explicación detallada del bucle utilizado para crear el files matriz, consulte:¿Cómo puedo almacenar el resultado del comando de búsqueda como matrices en Bash?

Todos los archivos y directorios producidos por el comando find /var/log/ -mtime +7 se incluirá en el tar expediente. Para incluir solo archivos, no directorios, consulte la respuesta de Skynet.

Para archivar registros de los siete días más recientes

Solo un personaje necesita cambiar:

#!/bin/bash
files=()
while IFS=  read -r -d $'\0'; do
    files+=("$REPLY")
done < <(find /var/log/ -mtime -7 -print0)
tar cvfz backup.tar.gz "${files[@]}"

Esto funciona porque find interpreta los argumentos numéricos de la siguiente manera:

Los argumentos numéricos se pueden especificar como
+n para mayor que n,
-n para menos de n,
n para exactamente n.

Por lo tanto, -mtime +7 significa más de 7 días de antigüedad mientras que -mtime -7 significa menos de 7. Tenga en cuenta que find ignorará las partes fraccionarias. Así +7 incluirá 8 días pero no 7,5 días. Ver man find para más detalles.


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

  2. ¿Cómo encontrar archivos modificados en los últimos 30 días en Linux?

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

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

  5. Cómo crear archivos dispersos en Linux usando el comando 'dd'

Cómo encontrar archivos en Linux

Cómo encontrar archivos usando la línea de comandos en la terminal de Linux

Cómo encontrar archivos más grandes o más pequeños que el tamaño X en Linux

Shell Scripting para principiantes:cómo escribir Bash Scripts en Linux

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

Cómo buscar archivos usando expresiones regulares en el script de shell de Linux