GNU/Linux >> Znalost Linux >  >> Linux

Jak vytvořit tar pro soubory starší než 7 dní pomocí skriptování linuxového shellu

Nahraďte find pomocí tohoto příkazu a zkuste to znovu,

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

Toto bude fungovat:

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

Všimněte si použití "${files[@]}" na rozdíl od ${files[*]} . "${files[@]}" se rozšíří na tar s jedním argumentem na název souboru a bude fungovat, i když názvy souborů obsahují mezery, tabulátory nebo nové řádky. Naproti tomu po rozbalení shellu ${files[*]} , provede dělení slov a potenciálně pozmění názvy souborů.

Podrobné vysvětlení smyčky použité k vytvoření files pole, viz:Jak mohu uložit výsledek příkazu find jako pole v Bash

Všechny soubory a adresáře vytvořené příkazem find /var/log/ -mtime +7 bude zahrnuto v tar soubor. Chcete-li zahrnout pouze soubory, nikoli adresáře, viz odpověď Skynetu.

Pro archivaci protokolů ze sedmi posledních dnů

Je třeba změnit pouze jeden znak:

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

To funguje, protože find interpretuje číselné argumenty následovně:

Číselné argumenty lze zadat jako
+n pro větší než n,
-n za méně než n,
n přesně n.

Tedy -mtime +7 znamená starší než 7 dní, zatímco -mtime -7 znamená méně než 7. Všimněte si, že find bude ignorovat zlomkové části. Tedy +7 bude zahrnovat 8 dní staré, ale ne 7,5 dne staré. Viz man find pro podrobnosti.


Linux
  1. Jak vytvořit Cron Job, která automaticky odstraní soubory, které jsou starší než 30 dní?

  2. Jak najít soubory upravené za posledních 30 dní v Linuxu?

  3. Jak odstranit soubory starší než N dní pomocí tmpreaper v Linuxu

  1. Jak najít a odstranit soubory starší než určité časové období v Linuxu

  2. vypočítat celkový použitý prostor na disku soubory staršími než 180 dní pomocí funkce find

  3. Jak v Linuxu odstraníte soubory starší než konkrétní datum?

  1. Jak smazat všechny soubory starší než X počet dní v Linuxu?

  2. Proč Find -mtime +1 vrací pouze soubory starší než 2 dny?

  3. Linux:pomocí funkce find vyhledejte soubory starší než <datum>