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.