Toto funguje (aktualizováno tak, aby zahrnovalo návrh Daniela Anderssona):
find -type f -printf '%T+ %p\n' | sort | head -n 1
Tento je trochu přenosnější a protože se nespoléhá na GNU find rozšíření -printf , takže to funguje i na BSD / OS X:
find . -type f -print0 | xargs -0 ls -ltr | head -n 1
Jedinou nevýhodou je, že je poněkud omezen na velikost ARG_MAX (což by mělo být irelevantní pro většinu novějších jader). Pokud je jich tedy více než getconf ARG_MAX vrácených znaků (262 144 v mém systému), nedává vám to správný výsledek. Také není kompatibilní s POSIX, protože -print0 a xargs -0 není.
Některá další řešení tohoto problému jsou nastíněna zde:Jak mohu najít nejnovější (nejnovější, nejstarší, nejstarší) soubor v adresáři? – Gregova Wiki
Následující příkazy příkazy zaručeně fungují s jakýmikoli podivnými názvy souborů:
find -type f -printf "%T+ %p\0" | sort -z | grep -zom 1 ".*" | cat
find -type f -printf "%[email protected] %T+ %p\0" | \
sort -nz | grep -zom 1 ".*" | sed 's/[^ ]* //'
stat -c "%y %n" "$(find -type f -printf "%[email protected] %p\0" | \
sort -nz | grep -zom 1 ".*" | sed 's/[^ ]* //')"
Použití nulového bajtu (\0 ) namísto znaku odřádkování (\n ) zajišťuje, že výstup find bude stále srozumitelný v případě, že jeden z názvů souborů obsahuje znak odřádkování.
-z přepínač způsobí, že řazení i grep interpretují pouze prázdné bajty jako znaky konce řádku. Protože pro hlavu žádný takový přepínač neexistuje, používáme grep -m 1 místo toho (pouze jeden výskyt).
Příkazy jsou seřazeny podle doby provedení (měřeno na mém počítači).
-
První příkaz bude nejpomalejší, protože musí nejprve převést mtime každého souboru do formátu čitelného člověkem a poté tyto řetězce seřadit. Potrubí ke kočce zabrání zbarvení výstupu.
-
Druhý příkaz je o něco rychlejší. Zatímco stále provádí převod data, číselné řazení (
sort -n) sekundy uplynulé od epochy Unixu jsou o něco rychlejší. sed odstraní sekundy od epochy Unixu. -
Poslední příkaz neprovádí vůbec žádnou konverzi a měl by být výrazně rychlejší než první dva. Samotný příkaz find nezobrazí mtime nejstaršího souboru, takže je potřeba statistika.
Související manuálové stránky:find – grep – sed – sort – stat