Il filesystem in Mac OS X conserva 3 timestamp separati per i file, come segue:
ctime
- cambia il tempo (ultimo cambio orario del proprietario del file, permessi
atime
- Tempo di accesso (al momento dell'ultimo accesso al file o al contenuto)
mtime
- Tempo di modifica (quando i contenuti effettivi sono stati modificati l'ultima volta)
Sebbene queste siano impostate automaticamente durante le varie fasi della vita di un file attraverso l'interazione normale, è importante capire che sono anche tutte modificabili per qualsiasi valore (valido) che si desidera in qualsiasi momento. È possibile sovrascrivere l'ultima ora modificata a una data precedente, se proprio necessario, ecc. Con un semplice comando di terminale:
StuffeMac:~ stuffe$ touch dan.txt
StuffeMac:~ stuffe$ ls -l dan.txt
-rw-r--r-- 1 stuffe staff 0 3 Jan 22:30 dan.txt
StuffeMac:~ stuffe$ touch -mt 201601022359 dan.txt
StuffeMac:~ stuffe$ ls -l dan.txt
-rw-r--r-- 1 stuffe staff 0 2 Jan 23:59 dan.txt
StuffeMac:~ stuffe$
Quindi tutto ciò che devi fare è leggere l'ora esistente che desideri memorizzare, apportare le modifiche e quindi ripristinare l'originale. Tutto questo può essere fatto in Automator.
Ti lascio giocare con ottenere il sotto in Automator, perché non ho tempo, ma ecco un modo veloce e sporco (con molti commenti e controlli per assicurarti di capirlo ed è non solo un carico di comandi del terminale) per leggere un timestamp, memorizzarlo in un file per dopo, e quindi riapplicare lo stesso timestamp utilizzando la riga di comando.
Dovresti essere in grado di salvare questi come script brevi modificati per accettare il nome file fornito da Automator), quindi chiamare quegli script come singole azioni di Automator
La cosa complicata è catturare l'intera stringa di date in una volta sola, come puoi vedere il formato cambia, e perdi tempo per visualizzare l'anno per i vecchi file (e come abbiamo appena lanciato nel 2016, quasi tutti i tuoi file mostreranno semplicemente il 2015 invece del timestamp se utilizzi ls
...
drwxr-xr-x+ 5 stuffe staff 170 3 May 2015 Public
-rw-r--r-- 1 stuffe staff 0 2 Jan 23:59 dan.txt
... Quindi puoi usare altri comandi, come getfileinfo
invece:
StuffeMac-6:~ stuffe$ getfileinfo -m Public
05/03/2015 13:07:33
StuffeMac-6:~ stuffe$ getfileinfo -m dan.txt
01/02/2016 23:59:00
Quindi, senza ulteriori indugi, ecco un trucco orribile su cui qualcuno può migliorare:
Passaggio 1 , leggi il timestamp e lo memorizza in una variabile e anche in un file in modo che possiamo recuperarlo in seguito
Imposta il file e assegnagli un tempo di modifica precedente come se fosse un vecchio file ed elenca il tempo modificato per dimostrare:
StuffeMac-6:~ stuffe$ touch originalfile.txt
StuffeMac-6:~ stuffe$ touch -mt 201506051200 originalfile.txt
StuffeMac-6:~ stuffe$ ls -l originalfile.txt
-rw-r--r-- 1 stuffe staff 0 5 Jun 2015 originalfile.txt
StuffeMac-6:~ stuffe$ getfileinfo -m originalfile.txt
06/05/2015 12:00:00
Ora leggiamo il timestamp e lo passiamo attraverso un comando chiamato awk
un paio di volte per eliminare lo spazio nel timestamp e sostituirlo con due punti, quindi usando /
e :
come delimitatori, stampare la data nel formato richiesto dal comando touch più tardi ( questo è un po 'sgradevole, ma essenzialmente il primo passaggio senza un delimitatore fornito utilizza uno spazio come predefinito, che sostituisco con un due punti, in modo che il la prossima passata che delimita in modo specifico su :
funziona correttamente: non ho potuto ottenere uno spazio e :
e /
in un passaggio ... - ma la leggibilità era più importante che efficienza ). Fai eco alla variabile per provare che l'hai creata correttamente, quindi esegui il dump in un file in modo da averla in seguito, leggi il file per provarlo:
StuffeMac-6:~ stuffe$ origtimestampvariable='getfileinfo -m originalfile.txt | awk '{print $1":"$2}'|awk -F[/:] '{print $3$2$1$4$5}''
StuffeMac-6:~ stuffe$ echo $origtimestampvariable
201505061200
StuffeMac-6:~ stuffe$ echo $origtimestampvariable > origtimestampvariable.txt
StuffeMac-6:~ stuffe$ more origtimestampvariable.txt
201505061200
Passaggio 2 Ora apporta le modifiche al file
Qui aggiungo semplicemente del testo, ma il tuo Automator farebbe il suo lavoro qui, quindi stamperà i tempi modificati modificati per provarlo.
StuffeMac-6:~ stuffe$ echo "making changes to the file now to change modified time" >> originalfile.txt
StuffeMac-6:~ stuffe$ ls -l originalfile.txt
-rw-r--r-- 1 stuffe staff 55 3 Jan 23:17 originalfile.txt
StuffeMac-6:~ stuffe$ getfileinfo -m originalfile.txt
01/03/2016 23:17:05
Passaggio 3 rimetti indietro il vecchio timestamp
Ora reimposta il timestamp modificato, utilizzando il file touch come mostrato nella parte superiore di questa risposta, ma automatizzando il bit in cui includiamo la data per includere il contenuto del file che ora sappiamo include il timestamp di cui abbiamo bisogno nel corretto formato:
StuffeMac-6:~ stuffe$ touch -mt 'cat origtimestampvariable.txt' originalfile.txt
Altri controlli per dimostrare che il timestamp originale è attivo:
StuffeMac-6:~ stuffe$ ls -l originalfile.txt
-rw-r--r-- 1 stuffe staff 55 6 May 2015 originalfile.txt
StuffeMac-6:~ stuffe$ getfileinfo -m originalfile.txt
05/06/2015 12:00:00