Jak skopiować plik w systemie Unix bez zmiany czasu ostatniej modyfikacji?


89

Jeśli skopiuję jakiś plik z jednego miejsca do innego za pomocą cp, znacznik czasu na skopiowanym pliku zostanie ustawiony na czas kopiowania.

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

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

Odpowiedzi:


103

cp -pZrób sztuczkę. W systemie Linux :

-p taki sam jak --preserve=mode,ownership,timestamps

W przypadku FreeBSD :

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

A dla OS X :

-pPowoduje, że cp zachowuje następujące atrybuty każdego pliku źródłowego w kopii: czas modyfikacji, czas dostępu, flagi plików, tryb pliku, identyfikator użytkownika i identyfikator grupy, zgodnie z uprawnieniami. Listy kontroli dostępu (ACL) i atrybuty rozszerzone (EA), w tym rozwidlenia zasobów, również zostaną zachowane.


25
cp -a jest również miło wiedzieć, oznacza to nie tylko -p, ale także -R do kopiowania całych katalogów i -d w celu zachowania linków.
przypadkowy użytkownik

2
Zauważ jednak, że podczas korzystania z GNU Coreutils cp -pzachowuje nie tylko znacznik czasu, ale także tryb i własność, a na FreeBSD oprócz czasu modyfikacji zachowuje również »czas dostępu, flagi plików, tryb pliku, ACL, identyfikator użytkownika i identyfikator grupy, jak dozwolone na podstawie uprawnień. «oraz w OS X dodatkowo» Rozszerzone atrybuty, w tym rozwidlenia zasobów «.
Stefan Schmidt,

w najnowszym OSX, cp -p wciąż dotyka znacznika czasu pliku źródłowego
afathman

15

W przypadku używania cpz GNU Coreutils , aby zachować tylko znaczniki czasu, a nie atrybuty, takie jak identyfikator użytkownika, identyfikator grupy lub tryb pliku, istnieje długa ręka, --preservektóra pozwala jawnie określić listę atrybutów do zachowania.

cp --preserve=timestamps source destination

Pamiętaj jednak, że ta składnia prawdopodobnie nie jest obsługiwana w innych Uniksach. Alternatywą może być użycie --timesparametru, rsyncktóry powinien być dostępny w większości instalacji.


4
To poprawna odpowiedź. Używanie -pnie jest poprawną odpowiedzią. -pzachowuje również własność i tryb. Którego może nie chcieć .. i nie zadawano tego pytania.
bshea


0

Ostatnio musiałem zrobić coś podobnego, ale zamiast tego użyć dowiązania symbolicznego. Aby utworzyć dowiązanie symboliczne i zachować oryginalny znacznik czasu:cp -ps src_file dst_symlink


Jako komentarz może to być przydatne dla kilku czytelników, ponieważ w odpowiedzi powoduje hałas dla większości czytelników.
ndemou
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.