2010-02-27 11:13:48 +0000 2010-02-27 11:13:48 +0000
90
90

Jak skopiować plik w unixie bez zmiany jego czasu ostatniej modyfikacji?

Jeśli skopiuję jakiś plik z jakiegoś miejsca do innego przy użyciu cp, znacznik czasu na skopiowanym pliku jest ustawiony na czas kopiowania.

Czy jest jakiś sposób, aby tego uniknąć?_

Muszę skopiować pliki bez zmiany ich znaczników czasu.

Odpowiedzi (4)

106
106
106
2010-02-27 11:20:21 +0000

cp -p robi sztuczkę. Dla Linux ](http://www.unix.com/man-page/Linux/1/cp/):

-p tak samo jak --preserve=mode,ownership,timestamps Dla FreeBSD :

-p Powoduje, że cp zachowuje następujące atrybuty każdego pliku źródłowego w kopii: czas modyfikacji, czas dostępu, flagi pliku, tryb pliku, ACL, identyfikator użytkownika i identyfikator grupy, jak pozwalają na to uprawnienia.

I dla OS X :

-p Powoduje, że cp zachowuje następujące atrybuty każdego pliku źródłowego w kopii: czas modyfikacji, czas dostępu, flagi pliku, tryb pliku, identyfikator użytkownika oraz identyfikator grupy, tak jak pozwalają na to uprawnienia. Listy kontroli dostępu (ACL) i atrybuty rozszerzone (EA), w tym rozwidlenia zasobów, również zostaną zachowane.

Zauważ, że może to zmienić czas dostępu pliku źródłowego (atime), jak pokazuje ls -lu. Również, stat lub stat -x mogą być użyte do ładnego pokazania czasu dostępu do danych, modyfikacji danych i zmiany statusu pliku, do którego dla macOS można dodać czas narodzin używając jawnego formatowania :

stat -f "%n%N%nAccess (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth (Btime): %SB%n" *
16
16
16
2015-06-09 15:45:17 +0000

Kiedy używasz cp z GNU Coreutils , aby zachować tylko znaczniki czasu, a nie atrybuty takie jak id użytkownika, id grupy lub tryb pliku, istnieje longhand --preserve, który pozwala jawnie określić listę atrybutów do zachowania.

cp --preserve=timestamps source destination

Należy jednak pamiętać, że ta składnia prawdopodobnie nie jest obsługiwana na innych Unicach. Alternatywą może być użycie parametru --times, który powinien być dostępny na większości instalacji.

11
11
11
2010-02-27 11:23:37 +0000

Istnieją trzy czasy w systemie plików Unix, czas dostępu (atime), czas modyfikacji (mtime) i czas zmiany inode (ctime). Możesz zmienić czas dostępu i czas modyfikacji za pomocą programu touch, na przykład

cp orig copy touch -r orig copy

Jednak nie możesz zmienić czasu zmiany inode.

0
0
0
2013-07-21 16:57:14 +0000

Ostatnio potrzebowałem zrobić coś podobnego, ale używając zamiast tego symlinka. Aby utworzyć symlink i zachować oryginalny znacznik czasu: cp -ps src_file dst_symlink