Як скопіювати файл у unix, не змінюючи його час останньої зміни?


79

Якщо копіювати файл з місця на інше, скористайтеся cp, тимчасова мітка на скопійованому файлі встановлюється на час копіювання.

Чи є спосіб уникнути цього?

Мені потрібно копіювати файли, не змінюючи їх тимчасових міток.

Відповіді:


92

cp -p робить свою справу. Для Linux :

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

Для FreeBSD :

-p Завдяки cp зберегти такі атрибути кожного вихідного файлу в копії: час модифікації, час доступу, прапори файлів, режим файлів, ACL, ідентифікатор користувача та ідентифікатор групи, як це дозволено правами доступу.

І для OS X :

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


20
cp -a також приємно знати, це передбачає не тільки -p, але й -R копіювати цілі каталоги і -d для збереження зв'язків.
casualuser

2
Зверніть увагу, що при використанні GNU Coreutils cp -p не тільки зберігає позначку часу, але й режим і право власності і далі FreeBSD окрім часу модифікації він також зберігає "час доступу, прапори файлів, режим файлів, ACL, ідентифікатор користувача та ідентифікатор групи, як це дозволено правами доступу". OS X додатково «Розширені атрибути, включаючи ресурсні вилки».
Stefan Schmidt

на останньому OSX, cp -p все ще торкається мітки вихідного файлу
afathman

12

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

cp --preserve=timestamps source destination

Майте на увазі, що цей синтаксис, ймовірно, не підтримується в інших Унісах. Альтернативою може бути використання --times параметр rsync які повинні бути доступні для більшості установок.


3
Це правильна відповідь. Використання -p не правильна відповідь. -p зберігає право власності & amp; режиму. Котрий не може бути бажаний .. Та не був попрошений у питанні.
bshea

11

У файловій системі Unix три рази - час доступу (час), час модифікації (mtime) і час зміни inode (ctime). Наприклад, можна змінити час доступу та час модифікації за допомогою сенсорної програми

cp orig copy
touch -r orig copy

Однак час зміни зміненого коду не можна змінити.



0

Нещодавно мені потрібно було зробити щось подібне, але замість цього використовую символічну посилання. Щоб створити символічну посилання і зберегти початкову мітку часу: cp -ps src_file dst_symlink


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