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

89

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

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

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

Lazer
источник

Ответы:

103

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

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

Для FreeBSD :

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

И для OS X :

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

Арьян
источник
25
Также приятно знать, что cp -a подразумевает не только -p, но и -R для копирования целых каталогов и -d для сохранения ссылок.
casualuser
2
Обратите внимание, что при использовании GNU Coreutils cp -pне только сохраняет отметку времени, но также режим и владельца и во FreeBSD, кроме времени модификации, он также сохраняет »время доступа, флаги файлов, режим файла, ACL, идентификатор пользователя и идентификатор группы, как это разрешено по разрешениям. «и на OS X дополнительно» Расширенные атрибуты, включая вилки ресурсов «.
Стефан Шмидт
на последнем OSX cp -p по-прежнему затрагивает
временную
15

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

cp --preserve=timestamps source destination

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

Штефан Шмидт
источник
4
Это правильный ответ. Использование -pне правильный ответ. -pсохраняет право собственности и режим. Который, возможно, не требуется .. и не был задан вопрос.
bshea
10

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

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

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

горилла
источник
0

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

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