GNU/Linux >> Znalost Linux >  >> Linux

Proč find -mtime nefunguje podle očekávání u souborů s různými časovými pásmy?

Řešení 1:

Je možné, že problém s časovým pásmem je červený sledě.

find . -mtime 7

by měl najít soubory, které jsou přesně sedm dní staré ("sedm" znamená mezi 7 000 a 7 999 dny, dát nebo vzít, a "staré" znamená "od poslední úpravy"). Pokud chcete soubory, které jsou starší než sedm dní, což soudě podle data prvního souboru (červen 2010) chcete, zkuste

find . -mtime +7

Souhlasím s vámi, že zdánlivé časové pásmo je zvláštní, ale myslím, že je to vysvětlitelné. man stat je jasné, že time_t je uložen, jak říká Sean R níže. Co ls dělá to, že to zobrazuje jako místní čas a je tak laskavé, že když tak učiní, vezme v úvahu místní zvyklosti na letní čas.

Můj systém je stejný:časy souborů, které náhodou spadají do března-října, jsou zobrazeny s časovým pásmem +0100, zatímco ty, které spadají do října-března, jsou zobrazeny s časovým pásmem +0000, ne proto, že je to uloženo v systému souborů, ale protože soubor časového pásma mému systému říká, že v červnu, když jsem se dotkl souboru, bych to udělal v době, o které jsem si myslel, že je 8 hodin ráno, a ne-bylo-7 hodin-kdyby-byla-zima. ls je dost laskavé, když zobrazuje časy, které jsou náhodou v létě, ukázat je tak, jak by vypadaly v létě, to je vše.

Pokud v ls najdete nějaká časová pásma výstup, který není letní ani zimní podle vašich místních zvyklostí, pak se mýlím – ale ve svém systému nemohu žádný najít.

Řešení 2:

S find -mtime funguje ve 24hodinových intervalech, takže

-mtime 0 or -mtime -1 mean today
-mtime 3 would mean 3 days old
-mtime +1 means greater than one day old 
-mtime -7 means less than 7 days old

Řešení 3:

Abych trochu více vysvětlil jeho časovou zónu (diskuze "mtime" je řešena jinými komentáři)...

Datum a čas jsou uloženy v souborech jako sekundy od půlnoci 1. ledna 1970, UTC. To znamená, že s nimi není spojeno žádné časové pásmo. Programy pak použijí systémové nastavení časového pásma v /etc/timezone , pokud není přepsáno proměnnou prostředí "TZ", k zobrazení tohoto času v místním časovém pásmu:

chats:/tmp$ touch foo
chats:/tmp$ ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 06:14 foo
chats:/tmp$ TZ=GMT ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 13:14 foo
chats:/tmp$

Všimněte si, že na posledním řádku je 13:14 a ve výstupu nad ním, kde používám své výchozí časové pásmo amerického horského času (GMT-0700), je 6:14. Rozdíl je v druhém "ls", kterým jsem nastavil proměnnou prostředí TZ na GMT.

Možná budete chtít použít "stat" k prozkoumání všech časů/dat spojených se soubory.


Linux
  1. Proč regulární výraz funguje v X, ale ne v Y?

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

  3. Linux – Proč Setuid nefunguje?

  1. Linux – Proč Locale Es_mx funguje, ale Es ne?

  2. Příkaz Rm ve skriptu Bash nefunguje s proměnnou?

  3. Proč „ukončit &“ nefunguje?

  1. Linux – Proč Rsync na Linuxu nezachovává všechna časová razítka (čas vytvoření)?

  2. Proč Tomcat pracuje s portem 8080, ale ne s 80?

  3. Proč git selže při push/fetch s příliš mnoha otevřenými soubory