Jak mogę uzyskać wiek danego pliku co najmniej za kilka dni?
Jestem świadomy ls -lh
i podobnych poleceń. Chcę coś, co będzie działać w ten sposób:
getfage <FILE> # prints out '12d' (12 days)
Ponadto musi to być nieco wieloplatformowe, ponieważ chciałbym również używać tego w systemie Mac OS X, ale główny przypadek użycia znajduje się na moim Linux-boxie.
UWAGA
Ponieważ Linux nie śledzi czasu tworzenia, szukam podwójnego rozwiązania: jednego dla mtime (linux) - to jest ostatni raz, gdy wspomniany plik został zmodyfikowany - i jednego dla Mac OS X, z którym można sobie poradzić mtime lub czas utworzenia.
command-line
files
timestamps
Alexej Magura
źródło
źródło
stat
daje ci wszystko, czego potrzebujesz, prawda?Odpowiedzi:
Unix nie śledzi daty utworzenia. Jedyne dostępne informacje to zazwyczaj ostatnie pliki:
( Z tej odpowiedzi )
Za pomocą
stat
polecenia można uzyskać daty związane z określonym plikiem .Przykład
OSX i HFS
Jeśli używasz OSX, systemem plików używanym w tym Uniksie jest HFS . Jest to jeden z niewielu (o których wiem), który utrzymuje datę utworzenia w systemie plików, wraz z czasem modyfikacji itp. Podobnym do innych Uniksów.
fragment
Znaczniki czasu
Znaczniki czasu są zawsze zachowywane w systemie plików, więc jesteś ograniczony przez to, jakie śledzenie czasu jest przez nie oferowane (EXT3, EXT4, XFS itp.).
Systemy plików
Jeśli kiedykolwiek będziesz ciekawy, spójrz na ten temat w Wikipedii: Porównanie systemów plików . Ma najobszerniejszą listę tematów plików, o których wiem, wraz z ładną tabelą różnych funkcji i statusu, czy jest obsługiwany czy nie w danym systemie plików.
Bibliografia
źródło
OSX śledzi tworzenie plików, ale większość innych jednorożców tego nie robi, więc nie ma sposobu, aby poznać upływ czasu od utworzenia pliku. Czas, który upłynął od ostatniej modyfikacji, można uzyskać w dowolnym systemie operacyjnym.
Nie ma przenośnego narzędzia powłoki do pobierania czasu modyfikacji pliku, z wyjątkiem tego, że
ls
ma wyjście, które jest prawie niemożliwe do przeanalizowania. W systemie Linux następujące polecenie wypisuje wiek pliku:W systemie Linux możesz używać go
stat -c %Y -- "$filename"
jako synonimudate +%s -r "$filename"
.OSX
date
istat
polecenia są różne. Możesz użyć następującego polecenia:Wbudowane systemy Linux i OSX mają domyślnie zainstalowany Perl.
źródło
stat
, w Linuksie syscall nie został przerobiony, więc musisz uciekać się do hakowaniadebugfs
.Na podstawie odpowiedzi Gillesa, oto funkcja bash, która zwraca wiek pliku w sekundach lub błąd.
źródło
Można użyć
stat -f%B
,ls -lU
lubmdls -n kMDItemFSCreationDate
aby zobaczyć czas tworzenia (narodziny) w OS X:źródło
spojrzeć
man stat
na-c
opcje (Format)źródło