Jednoduše, vzhledem k tomu, že jste označili linux, máte stat
dostupný příkaz, který extrahuje čas úpravy souboru a GNU date
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 {} +
verze 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ástat
na$1
parametr vestavěného shell skriptu;$1
byl přiřazenfind
jako jednu z cest, kterou našel. Možnost %Y nastat
příkaz vrátí čas modifikace v sekundách-od-doby.date -d @ ... +%-H
-- to trvá sekundy-od-doby z výše uvedeného nahrazení příkazu a zeptá sedate
aby nám dal část hodin tohoto času;@
syntaxe říkádate
že tomu dáváme sekundy od epochy jako vstupní formát. S-
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.