Как скопировать файл в unix, не изменяя его время последнего изменения?

113384
Lazer

Если я копирую какой-либо файл из одного места в другое, используя cpметку времени в скопированном файле, устанавливается время копирования.

Есть ли способ избежать этого?

Мне нужно копировать файлы без изменения их отметок времени.

72

4 ответа на вопрос

84
Arjan

cp -pделает трюк. Для Linux :

-p такой же как --preserve=mode,ownership,timestamps

Для FreeBSD :

-p Заставьте cp сохранить следующие атрибуты каждого исходного файла в копии: время изменения, время доступа, флаги файла, режим файла, ACL, идентификатор пользователя и идентификатор группы, как разрешено разрешениями.

И для OS X :

-pЗаставьте cp сохранить следующие атрибуты каждого исходного файла в копии: время изменения, время доступа, флаги файла, режим файла, идентификатор пользователя и идентификатор группы, как это разрешено разрешениями. Списки контроля доступа (ACL) и расширенные атрибуты (EAs), включая ветки ресурсов, также будут сохранены.

Также приятно знать, что cp -a подразумевает не только -p, но и -R для копирования целых каталогов и -d для сохранения ссылок. casualuser 14 лет назад 19
Обратите внимание, что при использовании GNU Coreutils `cp -p` не только сохраняет отметку времени, но также [режим и владельца] (http://www.gnu.org/software/coreutils/manual/coreutils.html#cp-invocation ) и в [FreeBSD] (https://www.freebsd.org/cgi/man.cgi?query=cp), кроме времени изменения, он также сохраняет »время доступа, флаги файлов, режим файлов, ACL, идентификатор пользователя и идентификатор группы, разрешенный разрешениями. «и на [OS X] (дополнительно https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/cp.1.html) расширенные атрибуты , включая ресурсные вилки «. Stefan Schmidt 9 лет назад 2
на последней версии OSX cp -p по-прежнему затрагивает временную метку исходного файла afathman 7 лет назад 0
11
gorilla

В файловой системе Unix три раза: время доступа (atime), время модификации (mtime) и время изменения inode (ctime). Вы можете изменить время доступа и время модификации с помощью сенсорной программы, например

копия оригинального файла touch -r оригинал 

Однако вы не можете изменить время смены инода.

время изменения inode см. также в [linux - Настройка создания или изменения временных меток - Переполнение стека] (http://stackoverflow.com/questions/4537291/setting-creation-or-change-timestamps) sdaau 11 лет назад 0
11
Stefan Schmidt

При использовании cpиз GNU Coreutils для сохранения только временных отметок, а не атрибутов, таких как идентификатор пользователя, идентификатор группы или режим файла, существует условное обозначение, --preserveкоторое позволяет явно указывать список атрибутов, которые должны быть сохранены.

cp --preserve=timestamps source destination 

Имейте в виду, что этот синтаксис, вероятно, не поддерживается другими Unices. Альтернативой может быть использование --timesпараметра, rsyncкоторый должен быть доступен в большинстве установок.

Это правильный ответ. Использование `-p` не является правильным ответом. `-p` также сохраняет владение и режим. Который может не быть желанным .. и не был задан вопрос. bshea 7 лет назад 3
0
fduff

Недавно мне нужно было сделать что-то похожее, но вместо этого использовать символическую ссылку. Чтобы создать символическую ссылку и сохранить оригинальную временную метку:cp -ps src_file dst_symlink

В качестве комментария это может быть полезно для нескольких читателей, в качестве ответа это добавляет шум для большинства читателей. ndemou 5 лет назад 0