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


89

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

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

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

Ответы:


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


В качестве комментария это может быть полезно для нескольких читателей, в качестве ответа это добавляет шум для большинства читателей.
ndemou
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.