Czy można zachować znaczniki czasu podczas kopiowania plików w systemie OS X?

14

Interesuje mnie łączenie plików z trzech komputerów Mac poprzez kopiowanie plików z każdego z nich do hierarchii folderów mojego projektu na zewnętrznym dysku twardym.

Z mojego dotychczasowego doświadczenia w kopiowaniu plików w OSX, czasami pliki tracą swoje utworzone i zmodyfikowane znaczniki czasu; tzn. są zmieniane do chwili obecnej, kiedy nastąpi kopia pliku.

Jak mogę się upewnić, że tak się nie stanie?

lustro
źródło
Kiedy tracisz znaczniki czasu?
lhf 31.01.13
Jak je skopiować?
Gerry

Odpowiedzi:

11

Właśnie natknąłem się na to, a wbudowane cppolecenie faktycznie to obsługuje.

Odkryłem kilka starych kart CF, z których chciałem wyciąć zdjęcia. Moje skrypty przetwarzania sprawdzą plik mtime, aby umieścić go w odpowiednim miejscu, więc potrzebowałem go zachować.

Od strony man :

 -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.

Tak więc, używając zshbyłem w stanie uruchomić ( NO NAMEjest to nazwa woluminu moich kart):

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

Uważam, że specjalny /**/*konstrukt jest specyficzny dla ZSH; jednak możesz zrobić coś takiego

find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path
Andrew Burns
źródło
+1 Prosty cp -pjest prosty, zachowuje zmodyfikowany czas (prawdopodobnie najbardziej przydatny z trzech znaczników czasu w pliku) i nie wymaga tworzenia pośredniego pliku archiwum.
wberry
1
O ile mi wiadomo, „cp -p” zapomina datę utworzenia i zamiast tego ustawia ją na datę modyfikacji. Co jest dość absurdalnym zachowaniem.
Nicolas Barbulesco
1
cp -pnie działa jednak podczas kopiowania z HFS + na FAT32.
NobleUplift,
9

Używam rsync do tego rodzaju kopii. Należy jednak pamiętać, że wersja dostarczona przez Apple to 2.6.9 i zawiera błędy. Musisz więc zbudować wersję zewnętrzną albo zbudować ją samodzielnie lub za pośrednictwem menedżera pakietów

na przykład

rsync -aE source_dir target_dir

Opcja -Ekopiuje listy ACL i -azachowuje uprawnienia i czasy uniksowe. (dobrze to zrobiło na rsync 2 rsync 3 wydaje się potrzebować -AX)

rsync można również skonfigurować kopiowanie na zdalne komputery bez montowania napędów.

Istnieje kilka interfejsów GUI dla rsync, np . ARsync . W przypadku innych narzędzi do synchronizacji katalogów zobacz to pytanie .

użytkownik151019
źródło
rsyncjest dobrym rozwiązaniem, ale pamiętaj, że nie zachowuje czasów dostępu. pax(patrz moja odpowiedź poniżej).
jaume
1
O ile mi wiadomo, „rsync” zapomina datę utworzenia i zamiast tego ustawia ją na datę modyfikacji. Co jest wielką porażką.
Nicolas Barbulesco
→ jaume: każde polecenie, które tworzy dowolną formę kopii „pliku a” w kierunku „pliku b”, musi najpierw przeczytać „plik a”. Dlatego czas dostępu do „pliku a” powinien zostać zmodyfikowany. To nie jest funkcja na poziomie poleceń, ale na poziomie jądra. Jeśli polecenie, poprzez inne wywołanie systemowe, przywraca czas dostępu do poprzedniego stanu, to jest to niebezpieczna sztuczka, ponieważ jest to zwykłe kłamstwo .
dan
→ Nicolas: por. man rsynci szukaj preserve times:) ⇒ odpowiedź Marka jest poprawna.
dan
1
→ Mark, @ Daniel - Właśnie przetestowałem rsync w Mac OS X 10.6.8. Lokalna kopia folderu z „rsync -rt” zapomina datę utworzenia plików i zastępuje ją datą modyfikacji. Pomimo instrukcji „rsync” z opcją „zachowaj czasy” dla opcji -t. Błąd jest prawdopodobnie obecny także w Mavericks i Yosemite.
Nicolas Barbulesco
4

Zastosowanie pax. Domyślny paxformat, zwany ustar , zachowuje modyfikację pliku i czasy dostępu (między innymi takie jak identyfikator użytkownika, identyfikator grupy, bity trybu pliku i rozszerzone atrybuty, takie jak komentarze Spotlight i listy ACL). Zobacz paxstronę podręcznika tutaj, aby uzyskać więcej informacji.

Najpierw utwórz paxarchiwum na każdym komputerze Mac i skopiuj je na zewnętrzny dysk twardy w następujący sposób:

  1. Otwórz Aplikacje> Narzędzia> Terminal.
  2. Wpisz w terminalu:

    $ cd
    

    i przeciągnij folder, w którym pliki do połączenia znajdują się na tym komputerze Mac, do terminala:

    wprowadź opis zdjęcia tutaj

    Możesz też wpisać pełną nazwę folderu:

    $ cd /path/to/your\ folder
    

    Spowoduje to zmianę bieżącego folderu na „twój folder”.

  3. Zarchiwizuj folder za pomocą pax:

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. Użyj Findera, aby skopiować nowo utworzone archiwum yourfolder.ustarna zewnętrzny dysk twardy.

Następnie wypakuj archiwa za pomocą pax:

  1. Otwórz terminal na komputerze Mac z podłączonym zewnętrznym dyskiem twardym USB.

  2. Zmień bieżący folder na hierarchię jednego folderu na zewnętrznym dysku twardym za pomocą polecenia, cdjak wyjaśniono powyżej:

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. Wypakuj archiwa:

    $ 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. W razie potrzeby przenieś pliki za pomocą Findera (Finder zachowuje modyfikacje plików i czasy dostępu w ramach tego samego woluminu).

(Przetestowałem tę procedurę w systemie OS X 10.8 (Mountain Lion).)

jaume
źródło
1
Nie działa dla nazw plików dłuższych niż 200 znaków community.hpe.com/t5/Ignite-UX/…
amleszk
0

Skompresuj je za pomocą zip lub wybierz je, klikając z wciśniętym klawiszem Ctrl lub prawym przyciskiem myszy i wybierz Kompresuj. Skopiuj skompresowane pliki do systemu docelowego i otwórz je tam.

Jeśli możesz, sformatuj dysk zewnętrzny jako system plików Mac OS, a nie FAT.

lhf
źródło
Nie kliknięcie opcji. Kliknij z wciśniętym klawiszem Ctrl. Lub kliknij prawym przyciskiem myszy.
Nicolas Barbulesco
1
Najlepszym wyborem do formatowania dysku jest Mac OS Extended Journalled. Mac OS Extended jest również nazywany HFS +.
Nicolas Barbulesco