GNU/Linux >> Znalost Linux >  >> Linux

Linux – Jak smazat soubory vytvořené mezi dvěma časy?

Mám složku, do které zálohuji své databáze, a chci smazat všechny zálohy vytvořené mezi 11:00 a 15:00 a nezáleží na tom, jaký je den – to je ten háček!

Zjistil jsem, že tento příkaz je velmi užitečný, ale ne v mém případě použití:

find . -type f -newermt '01 nov 2018 00:00:00' -not -newermt '10 nov 2018 00:00:00' -delete

Ale tady mě to nutí k intervalu mezi dvěma daty! Chci smazat pouze zálohy vytvořené mezi dvěma konkrétními časy.

Přijatá odpověď:

Jednoduše, vzhledem k tomu, že jste označili linux, máte stat dostupný příkaz, který extrahuje čas úpravy souboru a date GNU příkaz, který vyjme hodinu z daného času:

find . -type f -exec sh -c '
  h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' 
  sh {} ; -ls

Pokud výsledky vypadají správně, pak:

find . -type f -exec sh -c '
  h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' 
  sh {} ; -delete

Zde je zkušební provoz s -ls verze:

$ touch -d 'Wed Sep 12 11:00:01 EDT 2018' 11am
$ touch -d 'Wed Sep 12 12:00:02 EDT 2018' 12pm
$ touch -d 'Wed Sep 12 15:00:03 EDT 2018' 303pm
$ find . -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' sh {} ; -ls
1705096    0 -rw-r--r--   1 user group 0 Sep 12  2018 ./11am
1705097    0 -rw-r--r--   1 user group 0 Sep 12  2018 ./12pm

Poděkování patří Kusalanandovi za napsání skvělé odpovědi, kterou jsem sledoval, na adrese:Porozumění možnosti -exec `najít`

Upozorňujeme, že neděláme chtít {} + verzi find zde, jak chceme, -exec výsledky budou pro každý soubor, takže odstraníme pouze soubory, které odpovídají časovému rozsahu.

Vložený skript shellu má dvě hlavní části:určit časové razítko „hodiny“ souboru a poté vrátit úspěch nebo neúspěch na základě rozsahu. První část se skládá ze dvou částí. Proměnné je přiřazen výsledek substituce příkazu; příkaz by měl být přečten zevnitř:

  1. $(stat -c %Y "$1") — tato (druhá) náhrada příkazu volá stat na $1 parametr vestavěného shell skriptu; $1 byl přiřazen find jako jednu z cest, kterou našel. Možnost %Y do stat příkaz vrátí čas modifikace v sekundách-od-doby.
  2. date -d @ ... +%-H — to trvá sekundy-od-the-epochy od výše uvedeného nahrazení příkazu a zeptá se date aby nám dal část hodin z toho času; @ syntaxe říká date že mu dáváme sekundy od epochy jako vstupní formát. Pomocí - možnost ve výstupním formátu data, říkáme GNU datum ne doplňte hodnotu libovolnými úvodními nulami. Tím se zabrání pozdější nesprávné interpretaci osmičkové soustavy.
Související:Debian Lenny:Chcete, aby Splashy začalo hned po Grub2?

Jakmile máme $h Hodinová proměnná přiřazena, používáme bashův podmíněný operátor [[ zeptat se, zda je tato hodnota větší nebo rovna 11 a také striktně menší než 15.


Linux
  1. Jak přenášet soubory mezi dvěma počítači pomocí příkazů nc a pv

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

  3. Jak odstranit soubory se specifickou příponou v příkazovém řádku Linuxu

  1. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

  2. Jak vytvořit soubory určité velikosti v Linuxu

  3. Jak získat rozdíl (pouze doplňky) mezi dvěma soubory v linuxu

  1. Jak odstranit OBROVSKÉ (100-200 GB) soubory v Linuxu

  2. Jak přejmenovat soubory v Linuxu

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