Переименуйте файл, но сохраните оригинальное создание, время модификации в UNIX - PullRequest
2 голосов
/ 21 июня 2011

Есть ли способ переименовать файл, сохранив исходное время создания / изменения / чтения?Это в Солярисе.

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 21 июня 2011

Я не думаю, что вы можете сделать это с mv. Тем не менее, вы можете с cp -p; скопируйте файл под новым именем, затем удалите оригинал. Флаг -p сохраняет временные метки.

Вы получите новый инод, хотя ... то, чего не было бы с mv

1 голос
/ 21 июня 2011

Вы, вероятно, можете использовать cp -p, а затем удалить оригинал.

0 голосов
/ 08 ноября 2012

Команда touch может форсировать время изменения файла, но я не уверен, что это работает с ZFS.Если вы переименовываете большие файлы, это меньше затрат, чем cp -p.Вот скрипт bash:

oldFileTime=`find "$1" -maxdepth 0 -printf "%Ty%Tm%Td%TH%TM.%.2TS"`
mv "$1" "$2"
touch -t "$oldFileTime" "$2"
0 голосов
/ 21 июня 2011

В вариации на тему, предложенную другими:

cp -al "$oldname" "$newname"
unlink "$oldname"

следует избегать любого копирования, если $ oldname и $ newname находятся в одной точке монтирования (файловая система).


Вам повезло.

Solaris (с ZFS) - одна из немногих файловых систем, которые на самом деле учитывают свойство времени создания для файлов.

Теперь включеноtopic: Нет, вы не можете сохранить все время: индекс будет меняться, а имя файла меняется.Это означает, что индекс ctime будет меняться в соответствии с (POSIX) определением.

Ваше время последнего доступа также изменится, если только вы не используете точку монтирования noatime (zfs set atime = off).

Я не думаю, что есть способ изменить это.Однако время создания файла не должно меняться вообще. Я собирался показать команды, чтобы показать время создания, но, к сожалению, у меня нет удобной коробки с Solaris, и я не могу ее найти.Я думаю, что ваша лучшая ставка - man ls find stat.

GL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...