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

13

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

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

Come posso essere sicuro che ciò non accada?

    
posta themirror 30.01.2013 - 20:23
fonte

4 risposte

9

L'ho appena trovato e il comando built in cp lo gestisce effettivamente.

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

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, utilizzando zsh sono riuscito a eseguire ( NO NAME è il nome del mio volume di carte):

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

Credo che il costrutto speciale /**/* sia specifico per ZSH; tuttavia potresti fare qualcosa di simile

find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path
    
risposta data 22.06.2013 - 15:50
fonte
9

Io uso rsync per fare questo sorta di copia. Comunque nota la versione fornita da Apple è 2.6.9 e ha bug su questo. Quindi è necessario che ne crei uno costruito da terzi o tramite un gestore di pacchetti

ad esempio

rsync -aE source_dir target_dir

L'opzione -E copia gli ACL e -a conserva le autorizzazioni e i tempi di unix. (beh, ha funzionato con rsync 2 rsync 3 sembra aver bisogno di -AX)

rsync può anche essere impostato per copiare su macchine remote senza montare unità.

Ci sono alcuni front end della GUI per rsync, ad es. aRsync . Per altri strumenti di sincronizzazione delle directory, consulta questa domanda .

    
risposta data 31.01.2013 - 13:38
fonte
4

Utilizza pax . Il formato predefinito pax , chiamato ustar , conserva le modifiche ai file e i tempi di accesso (tra le altre cose come ID utente, ID gruppo, bit di modalità file e attributi estesi come commenti Spotlight e ACL). Consulta la pagina man di pax qui per ulteriori i dettagli.

Per prima cosa, crea un archivio pax su ogni Mac e copialo sul disco rigido esterno in questo modo:

  1. Apri Applicazioni > Utilità > Terminale.
  2. Scrivi nel Terminale:

    $ cd
    

    e trascina la cartella in cui risiedono i file da risiedere su quel Mac al Terminale:

    Inalternativapuoidigitareilnomecompletodellacartella:

    $cd/path/to/your\folder

    Questocambieràlacartellacorrentein"la tua cartella".

  3. Archivia la cartella con pax :

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. Usa il Finder per copiare il nuovo archivio creato yourfolder.ustar sul disco rigido esterno.

Quindi estrai gli archivi con pax :

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

  2. Cambia la cartella corrente nella gerarchia di cartelle singole sul disco rigido esterno con il comando cd come spiegato sopra:

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. Estrai 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. Sposta i file con il Finder se necessario (il Finder conserva le modifiche ai file e i tempi di accesso all'interno dello stesso volume).

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

    
risposta data 31.01.2013 - 11:17
fonte
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 puoi, formatta l'unità esterna come file system Mac OS, non FAT.

    
risposta data 31.01.2013 - 12:04
fonte

Leggi altre domande sui tag