GNU/Linux >> Znalost Linux >  >> Linux

Jak odstranit soubory vytvořené mezi dvěma časy?

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ř:

  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 na stat příkaz vrátí čas modifikace v sekundách-od-doby.
  2. date -d @ ... +%-H -- to trvá sekundy-od-doby z výše uvedeného nahrazení příkazu a zeptá se date 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.


Linux
  1. Jak extrahovat protokoly mezi dvěma časovými razítky?

  2. Jak Rsync souborů mezi dvěma dálkovými ovladači?

  3. Jak získat pouze soubory vytvořené po rande s Ls?

  1. Jak zjistím rozdíl mezi dvěma daty pod bash

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

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

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

  2. Jak spojit dva soubory CSV?

  3. Jak rychle zkopírovat velké množství souborů mezi dvěma servery