I timestamp possono essere conservati durante la copia di file su OS X?


14

Sono interessato a combinare i file da tre Mac copiando i file da ciascuno in una singola gerarchia di cartelle del mio progetto su un disco rigido esterno.

Nella mia esperienza passata copiando i file in OSX, a volte i file perdono i timestamp creati e modificati; cioè vengono cambiati nel momento attuale in cui avviene la copia del file.

Come posso assicurarmi che ciò non accada?


Quando perdi i timestamp?
1313

Copiandoli come?
Gerry,

Risposte:


11

Mi sono appena imbattuto in questo e il cpcomando integrato lo gestisce effettivamente.

Ho scoperto un mucchio di vecchie schede CF da cui volevo raccogliere le immagini. I miei script di elaborazione esamineranno il file mtime per metterlo nella posizione corretta, quindi ho bisogno di conservarlo.

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

Quindi, usando zshsono stato in grado di eseguire ( NO NAMEessendo il nome del volume delle mie carte):

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

Credo che il /**/*costrutto speciale sia specifico di ZSH; comunque potresti fare qualcosa del genere

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

+1 Un semplice cp -pè semplice, conserva il tempo modificato (probabilmente il più utile dei tre timestamp su un file) e non richiede la creazione di un file di archivio intermedio.
wberry,

1
Per quanto ne so, "cp -p" dimentica la data di creazione e invece la imposta sulla data di modifica. Il che è un comportamento abbastanza assurdo.
Nicolas Barbulesco,

1
cp -pnon funziona durante la copia da HFS + a FAT32.
NobleUplift

9

Uso rsync per fare questo tipo di copia. Tuttavia, nota che la versione fornita da Apple è la 2.6.9 e presenta dei bug. Quindi è necessario crearne una di terze parti costruirla da soli o tramite un gestore di pacchetti

per esempio

rsync -aE source_dir target_dir

L'opzione -Ecopia gli ACL e -aconserva i permessi e i tempi di unix. (bene, su rsync 2 rsync 3 sembra aver bisogno di -AX)

rsync può anche essere configurato per la copia su macchine remote senza montare unità.

Esistono alcuni front-end della GUI per rsync, ad esempio aRsync . Per altri strumenti di sincronizzazione della directory, vedere questa domanda .


rsyncè una buona soluzione, ma tieni presente che non preserva i tempi di accesso. pax(vedi la mia risposta di seguito).
Jaume,

1
Per quanto ne so, "rsync" dimentica la data di creazione e invece la imposta sulla data di modifica. È un grosso fallimento.
Nicolas Barbulesco,

→ jaume: qualsiasi comando che esegua qualsiasi forma di copia di "file a" verso "file b" deve prima leggere "file a". Quindi il tempo di accesso di "file a" dovrebbe essere modificato. Questa non è una funzionalità a livello di comando ma a livello di kernel. Se un comando, attraverso un'altra chiamata di sistema, ripristina il tempo di accesso al suo stato precedente, allora questo è un trucco pericoloso, perché è una menzogna .
dan

→ Nicolas: cfr. man rsynce cerca preserve times:) ⇒ la risposta di Mark è corretta.
dan

1
→ Mark, @daniel - Ho appena testato rsync in Mac OS X 10.6.8. Una copia locale di una cartella con "rsync -rt" dimentica la data di creazione dei file e la sostituisce con la loro data di modifica. Nonostante il manuale di "rsync" che dice "preserva i tempi" per l'opzione -t. Il bug è probabilmente presente anche in Mavericks e Yosemite.
Nicolas Barbulesco,

4

Usa pax. Il paxformato predefinito , chiamato ustar , conserva la modifica dei file e i tempi di accesso (tra le altre cose come ID utente, ID gruppo, bit della modalità file e attributi estesi come commenti Spotlight e ACL). Vedi la paxpagina man qui per maggiori dettagli.

Innanzitutto, crea un paxarchivio su ogni Mac e copialo sul disco rigido esterno in questo modo:

  1. Apri Applicazioni> Utilità> Terminale.
  2. Digitare nel terminale:

    $ cd
    

    e trascina la cartella in cui i file da combinare risiedono su quel Mac sul Terminale:

    inserisci qui la descrizione dell'immagine

    In alternativa puoi digitare il nome completo della cartella:

    $ cd /path/to/your\ folder
    

    Ciò cambierà la cartella corrente in "la tua cartella".

  3. Archivia la cartella con pax:

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. Utilizzare il Finder per copiare l'archivio appena creato yourfolder.ustarsul disco rigido esterno.

Poi estrarre gli archivi con pax:

  1. Apri Terminale sul Mac con il disco rigido USB esterno collegato.

  2. Cambia la cartella corrente nella gerarchia della singola cartella sul disco rigido esterno con il comando cdcome spiegato sopra:

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. Estrarre gli archivi:

    $ 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. Se necessario, sposta i file con il Finder (il Finder conserva i tempi di modifica dei file e di accesso nello stesso volume).

(Ho testato questa procedura su OS X 10.8 (Mountain Lion).)


1
Non funziona con nomi di file più lunghi di 200 caratteri community.hpe.com/t5/Ignite-UX/…
amleszk

0

Comprimili con zip o selezionali con ctrl-clic o tasto destro e scegli Comprimi. Copia i file compressi sul tuo sistema di destinazione e aprili lì.

Se è possibile, formattare l'unità esterna come un file system Mac OS, non FAT.


Non Opzione-clic. Ctrl-clic. Oppure fai clic con il tasto destro.
Nicolas Barbulesco,

1
La scelta migliore per la formattazione del disco è Mac OS Extended Journalled. Mac OS Extended è anche chiamato HFS +.
Nicolas Barbulesco,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.