Можно ли сохранить временные метки при копировании файлов в OS X?


14

Я заинтересован в том, чтобы объединить файлы с трех компьютеров Mac, скопировав файлы каждого из них в единую иерархию папок моего проекта на внешнем жестком диске.

В моем прошлом опыте копирования файлов в OSX иногда файлы теряли свои метки времени создания и изменения; то есть они изменены на текущий момент, когда происходит копирование файла.

Как я могу убедиться, что этого не произойдет?


Когда вы теряете метки времени?
2013 года

Копировать их как?
Джерри

Ответы:


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: любая команда, делающая любую форму копирования «файла a» в сторону «файла b», должна сначала прочитать «файл a». Следовательно, время доступа к «файлу а» должно быть изменено. Это не функция на уровне команд, а на уровне ядра. Если команда через другой системный вызов восстанавливает время доступа к своему предыдущему состоянию, то это опасный прием, потому что это простая ложь .
дан

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

1
→ Марк, @daniel - Я только что протестировал rsync в Mac OS X 10.6.8. Локальная копия папки с «rsync -rt» забывает дату создания файлов и заменяет их датой изменения. Несмотря на руководство для «rsync», говоря «сохранить время» для опции -t. Ошибка, вероятно, присутствует и в Mavericks и Yosemite.
Николас Барбулеско

4

Использование pax. Формат по умолчанию pax, называемый ustar , сохраняет время изменения файла и время доступа (среди прочего, такие как идентификатор пользователя, идентификатор группы, биты режима файла и расширенные атрибуты, такие как комментарии Spotlight и ACL). Смотрите paxman-страницу здесь для более подробной информации.

Сначала создайте 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-клика или правого клика и выберите «Сжать». Скопируйте сжатые файлы в целевую систему и откройте их там.

Если можете, отформатируйте внешний диск как файловую систему Mac OS, а не как FAT.


Не Option-клик. Ctrl щелчок. Или щелкните правой кнопкой мыши.
Николас Барбулеско

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