GNU/Linux >> Znalost Linux >  >> Linux

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

Snažím se pochopit proč najít interpretuje časy úprav souborů tak, jak to dělá. Konkrétně nechápu, proč -mtime +1 nezobrazuje soubory starší než 48 hodin.

Jako příklad testu jsem vytvořil tři testovací soubory s různými modifikovanými daty:

[[email protected]obox findtest]# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 25 08:44 foo1
-rw-r--r-- 1 root root 0 Sep 24 08:14 foo2
-rw-r--r-- 1 root root 0 Sep 23 08:14 foo3

Potom jsem spustil find pomocí -mtime +1 přepínač a získal následující výstup:

[[email protected] findtest]# find -mtime +1
./foo3

Potom jsem spustil find s -mmin +1440 a získal následující výstup:

[[email protected] findtest]# find -mmin +1440
./foo3
./foo2

Podle manuálové stránky pro hledání chápu, že se jedná o očekávané chování:

 -mtime n
        File’s  data was last modified n*24 hours ago.  See the comments
        for -atime to understand how rounding affects the interpretation
        of file modification times.


-atime n
       File  was  last  accessed n*24 hours ago.  When find figures out
       how many 24-hour periods ago the file  was  last  accessed,  any
       fractional part is ignored, so to match -atime +1, a file has to
       have been accessed at least two days ago.

Tohle mi ale pořád nedává smysl. Pokud je tedy soubor starý 1 den, 23 hodin, 59 minut a 59 sekund, najít -mtime +1 ignoruje to všechno a zachází s tím, jako by to bylo 1 den, 0 hodin, 0 minut a 0 sekund? V takovém případě není technicky starší než 1 den a ignorován?

Ne… ne… počítá.

Přijatá odpověď:

Jednoduchá odpověď je, myslím, že vaše implementace find se řídí standardem POSIX/SuS, který říká, že se musí chovat tímto způsobem. Citace z SUSv4/IEEE Std 1003.1, vydání 2013, „najít“:

-mtime n
     Primární hodnota bude vyhodnocena jako pravdivá, pokud je čas úpravy souboru odečtený
     od inicializačního času dělený 86400 (se všemi vyřazenými zbytky) je n.

(Jinde v tomto dokumentu je vysvětleno, že n může být ve skutečnosti +n a význam toho jako „větší než“).

Pokud jde o to, proč standard říká, že se tak bude chovat – no, předpokládal bych, že dlouho v minulosti byl programátor líný nebo o tom nepřemýšlel a prostě napsal kód C (current_time - file_time) / 86400 . Celočíselná aritmetika C zahodí zbytek. Skripty se spouštěly v závislosti na tomto chování, a proto bylo standardizováno.

Související:přijetí -Najdi význam- Vyhledávání ve slovníku!

Chování podle specifikace by bylo také přenositelné do hypotetického systému, který by ukládal pouze datum změny (nikoli čas). Nevím, jestli takový systém existoval.


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

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

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

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

  2. najít a odstranit soubor nebo složku starší než x dní

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

  1. Najděte všechny soubory starší než jedna minuta

  2. Bezvadné mazání souborů starších než 30 dní

  3. Proč v systému Linux nemohu vytvářet soubory větší než 2 GB?