Jak ustawić mtime pliku w formacie epoki?

11

Wiem, jak uzyskać plik mtime w formacie epoki:

stat --format=%Y <file>

Ale nie byłem w stanie dowiedzieć się, jak ustawić mtime pliku w formacie epoki. Strona podręcznika dotykowego (1) wydaje się akceptować tylko wartość „znacznika czasu” (mniej więcej ustalony format, który wykorzystuje miesiące, dni, godziny, minuty, itp.) Lub „w większości dowolny format czytelnego dla człowieka ciągu daty”.

Czy jest jeszcze jakieś narzędzie, nad którym powinienem się zastanowić?

Dzięki.

eil
źródło
1
Należy zawsze podać swój system operacyjny. Rozwiązania bardzo często zależą od używanego systemu operacyjnego. Czy korzystasz z Uniksa, Linuksa, BSD, OSX, czy czegoś innego? Która wersja
terdon

Odpowiedzi:

10

Przynajmniej w świecie GNU:

touch --date=@1403970787 file

Jak z date.

Hauke ​​Laging
źródło
1

Z perl:

$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...

Spowoduje to zmianę mtime wszystkich plików @ARGV. (stat($_))[8]jest atime pliku.

utime może otrzymać listę plików, jeśli nie przejmujesz się zmianą, możesz spróbować:

 $ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...

Uwaga

utimezależy od biblioteki wykonawczej C i używanego systemu plików. zobacz więcej w perldoc -f utimei perldoc perlport.

Cuonglm
źródło
0

Za pomocą touchpolecenia z GNU coreutils (tj. W niewbudowanym systemie Linux i Cygwin), spójrz do pełnej instrukcji (zwykle dostępnej lokalnie w formacie informacyjnym), aby uzyskać dokumentację formatów wprowadzania daty . Daty epoki są oznaczone prefiksem @:

touch -d @1234567890 foo

Działa to również z BusyBox (przynajmniej w niektórych systemach, może to zależeć od opcji kompilacji).

Z * BSD nie sądzę, że możesz to zrobić touchsam, ale możesz zadzwonić, dateaby sformatować czas epoki do formatu, który touchakceptuje.

touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo

POSIX notorycznie nie ma możliwości manipulowania datami epoki. Możesz użyć perla .

Gilles „SO- przestań być zły”
źródło