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ř:
$(stat -c %Y "$1")— tato (druhá) náhrada příkazu volástatna$1parametr vestavěného shell skriptu;$1byl přiřazenfindjako jednu z cest, kterou našel. Možnost %Y dostatpříkaz vrátí čas modifikace v sekundách-od-doby.date -d @ ... +%-H— to trvá sekundy-od-the-epochy od výše uvedeného nahrazení příkazu a zeptá sedateaby 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.
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.