Чи можна зберігати часові позначки при копіюванні файлів на OS X?


14

Мені цікаво поєднувати файли з трьох Macs, копіюючи файли кожного з них в одну ієрархію папок мого дизайну на зовнішньому жорсткому диску.

У моєму минулому досвіді копіювання файлів в OSX іноді файли втрачають свої створені та модифіковані часові позначки; тобто вони змінюються на даний момент, коли відбувається копія файлу.

Як я можу переконатися, що цього не відбувається?


Коли ви втрачаєте часові позначки?
lhf

Як їх копіювати?
Джеррі

Відповіді:


11

Я просто перебіг це, і вбудована cpкоманда насправді справляється з цим.

Я виявив купу старих карт CF, з яких хотів збирати знімки. Мої сценарії обробки будуть дивитися на файл mtime, щоб помістити його в потрібне місце, тому я потребував його збереження.

На чоловіковій сторінці :

 -p    Cause cp to preserve the following attributes of each source file in the copy: modification time,
       access time, file flags, file mode, user ID, and group ID, as allowed by permissions.  Access
       Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also be pre-
       served.

       If the user ID and group ID cannot be preserved, no error message is displayed and the exit value
       is not altered.

       If the source file has its set-user-ID bit on and the user ID cannot be preserved, the set-user-
       ID bit is not preserved in the copy's permissions.  If the source file has its set-group-ID bit
       on and the group ID cannot be preserved, the set-group-ID bit is not preserved in the copy's per-
       missions.  If the source file has both its set-user-ID and set-group-ID bits on, and either the
       user ID or group ID cannot be preserved, neither the set-user-ID nor set-group-ID bits are pre-
       served in the copy's permissions.

Отже, за допомогою zshмене вдалося запустити ( NO NAMEяк ім'я гучності моїх карток):

cp -rvp /Volumes/NO\ NAME/DCIM/**/*.{JPG,jpg} ~/Desktop/tmp/pics

Я вважаю, що спеціальна /**/*конструкція є специфічною для ZSH; проте ти можеш зробити щось подібне

find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path

+1 Простий cp -pпрямолінійний, зберігає модифікований час (мабуть, найкорисніший із трьох часових позначок у файлі) і не потребує створення проміжного архівного файлу.
wberry

1
Наскільки я знаю, "cp -p" забуває дату створення та замість неї встановлює дату модифікації. Що досить абсурдна поведінка.
Ніколя Барбулеско

1
cp -pне працює при копіюванні з HFS + на FAT32.
NobleUplift

9

Я використовую rsync, щоб зробити таку копію. Однак зауважте, що версія, що постачається Apple, становить 2.6.9 і має помилки на цьому. Таким чином, вам потрібно побудувати третю сторону або побудувати самостійно, або через менеджера пакетів

наприклад

rsync -aE source_dir target_dir

Опція -Eкопіює ACL та -aзберігає дозволи та часи unix. (ну це робиться на rsync 2, rsync 3, здається, потребує -AX)

rsync також можна налаштувати для копіювання на віддалені машини без встановлення накопичувачів.

Для rsync є кілька передніх інтерфейсів GUI, наприклад, aRsync . Для інших інструментів синхронізації каталогів див. Це питання .


rsyncце гарне рішення, але пам’ятайте, що воно не зберігає час доступу. pax(див. мою відповідь нижче).
jaume

1
Наскільки я знаю, "rsync" забуває дату створення та замість неї встановлює дату модифікації. Що велика невдача.
Ніколя Барбулеско,

→ jaume: будь-яка команда, яка робить будь-яку форму копії "file a" у бік "file b", спочатку повинна прочитати "file a". Отже, час доступу до "file a" слід змінити. Це не функція на рівні команд, а на рівні ядра. Якщо команда через інший системний виклик відновлює час доступу до свого попереднього стану, то це небезпечна хитрість, оскільки це звичайна брехня .
дан

→ Ніколя: пор. man rsyncі шукайте preserve times:) ⇒ відповідь від Марка правильна.
дан

1
→ Mark, @daniel - Я щойно тестував rsync в Mac OS X 10.6.8. Локальна копія папки з "rsync -rt" забуває дату створення файлів і замінює її датою модифікації. Незважаючи на посібник для "rsync", говорить "зберегти час" для параметра -t. Баг, ймовірно, присутній і в Мавериках та Йосеміті.
Ніколя Барбулеско

4

Використовуйте pax. Формат за замовчуванням pax, який називається ustar , зберігає зміни файлів та час доступу (серед іншого, такі як ідентифікатор користувача, ідентифікатор групи, біти режиму файлу та розширені атрибути, такі як коментарі Spotlight та ACL). Дивіться paxсторінку чоловіка тут для більш детальної інформації.

Спочатку створіть paxархів на кожному Mac та скопіюйте його на зовнішній жорсткий диск таким чином:

  1. Відкрийте програми> Утиліти> Термінал.
  2. Введіть термінал:

    $ cd
    

    і перетягніть папку, в якій файли, які потрібно об’єднати, на цьому Mac до терміналу:

    введіть тут опис зображення

    Можна також ввести повне ім'я папки:

    $ cd /path/to/your\ folder
    

    Це змінить поточну папку на "вашу папку".

  3. Заархівуйте папку за допомогою pax:

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. За допомогою Finder скопіюйте щойно створений архів yourfolder.ustarна зовнішній жорсткий диск.

Потім витягніть архіви за допомогою pax:

  1. Відкрийте термінал на Mac, до якого підключений зовнішній жорсткий диск USB.

  2. Змініть поточну папку на ієрархію однієї папки на зовнішньому жорсткому диску за допомогою команди, cdяк описано вище:

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. Витяг архівів:

    $ pax -r -p e < yourfolder.ustar
    $ pax -r -p e < yourfolder2.ustar
    $ pax -r -p e < yourfolder3.ustar
    $ ls
    your folder
    your folder 2
    your folder 3
    
  4. Перемістіть файли за допомогою Finder, якщо вам потрібно (Finder зберігає модифікацію файлу та час доступу в межах одного обсягу).

(Я перевірив цю процедуру на OS X 10.8 (Mountain Lion).)


1
Doesnt робота для імен файлів довше , ніж 200 символів community.hpe.com/t5/Ignite-UX / ...
amleszk

0

Стисніть їх за допомогою zip або виберіть їх клацанням ctrl або клацніть правою кнопкою миші та оберіть Compress. Скопіюйте стислі файли у вашу цільову систему та відкрийте їх там.

Якщо ви можете, відформатуйте свій зовнішній диск у вигляді файлової системи Mac OS, а не FAT.


Не Опція-клік. Клацніть Ctrl. Або клацніть правою кнопкою миші.
Ніколя Барбулеско

1
Найкращий вибір для форматування диска - це Mac OS Extended Journalled. Mac OS Extended також називається HFS +.
Ніколя Барбулеско
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.