GNU/Linux >> Linux Esercitazione >  >> Linux

Come creare tar per file più vecchi di 7 giorni usando lo scripting della shell Linux

Sostituisci il tuo find comando con questo e riprova,

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

Funzionerà:

#!/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[@]}"

Nota l'uso di "${files[@]}" al contrario di ${files[*]} . "${files[@]}" si espanderà per fornire tar con un argomento per nome di file e funzionerà anche se i nomi di file contengono spazi, tabulazioni o caratteri di nuova riga. Al contrario, dopo che la shell si espande ${files[*]} , eseguirà la suddivisione delle parole, alterando potenzialmente i nomi dei file.

Per una spiegazione dettagliata del ciclo utilizzato per creare il files array, vedi:Come posso memorizzare il risultato del comando find come array in Bash

Tutti i file e le directory prodotti dal comando find /var/log/ -mtime +7 sarà incluso nel tar file. Per includere solo i file, non le directory, vedi la risposta di Skynet.

Per archiviare i log degli ultimi sette giorni

È necessario modificare solo un carattere:

#!/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[@]}"

Funziona perché find interpreta gli argomenti numerici come segue:

Gli argomenti numerici possono essere specificati come
+n per maggiore di n,
-n per meno di n,
n per esattamente n.

Pertanto, -mtime +7 significa più vecchio di 7 giorni mentre -mtime -7 significa minore di 7. Nota che find ignorerà le parti frazionarie. Così +7 includerà 8 giorni ma non 7,5 giorni. Vedi man find per i dettagli.


Linux
  1. Come eliminare tutti i file più vecchi di X numero di giorni in Linux?

  2. Come creare un processo Cron che elimina automaticamente i file più vecchi di 30 giorni?

  3. Come trovare quale shell stai usando su Linux

  4. Come trovare i file modificati negli ultimi 30 giorni in Linux?

  5. Come eliminare i file più vecchi di n giorni SENZA usare il comando trova

Come trovare file in Linux

Come trovare i file usando la riga di comando nel terminale Linux

Script di shell per principianti - Come scrivere script Bash in Linux

Come eliminare file più vecchi di giorni specificati in Linux

calcola lo spazio su disco totale utilizzato dai file più vecchi di 180 giorni usando find

Come posso trovare la mia versione della shell usando un comando Linux?