it-swarm-ru.tech

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

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

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

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

84
Lazer

cp -p делает свое дело. Для Linux :

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

Для FreeBSD :

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

И для OS X :

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

98
Arjan

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

cp --preserve=timestamps source destination

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

15
Stefan Schmidt

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

 cp orig copy 
 touch -r orig copy 

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

11
gorilla

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

0
fduff