Modifica della data di creazione di un file


62

La prego di farmi sapere come posso modificare la data di creazione di un file in Lion. Mi rendo conto che esiste il comando touch-t ma che non funziona in Lion. Un paio di persone hanno menzionato un altro modo, ma penso che abbiano scritto la soluzione in un linguaggio "programmatore" piuttosto che in un linguaggio laico - qualcuno sarebbe in grado di rispondere in un modo che un profano può eseguire?

Molte grazie per il vostro aiuto.


La spiegazione del "programmatore" di cui altre persone hanno scritto è probabilmente un riferimento al "tocco". Dovresti aprire un Terminale, navigare nella cartella in cui si trova il file, quindi utilizzare il comando touch per modificare la data di creazione della torta.
Derek Knight,

2
FWIW Sei sulla retta linea con "touch-t", ma c'è uno spazio tra la h e la -. È "touch -t"
Derek Knight il

Risposte:


95

touch -tnormalmente cambia solo i tempi di modifica e accesso. Modifica l'ora di creazione solo se l'ora di destinazione è precedente all'ora di creazione originale.

touch -t 199912312359 file.txt
touch -t $(date -jf %FT%T 1999-12-31T23:59:59 +%Y%m%d%H%M%S) file.txt

SetFile -d cambia sempre il tempo di creazione.

SetFile -d '12/31/1999 23:59:59' file.txt
SetFile -d "$(GetFileInfo -m test.txt)" file.txt

SetFile fa parte del pacchetto di strumenti della riga di comando che può essere scaricato da developer.apple.com/downloads o dalle preferenze di Xcode.


4
-m per cambiare il tempo di modifica.
AlikElzin-Kilaka

5
In Yosemite, il tocco mi ha richiesto di utilizzare il formato +%Y%m%d%H%M.%S(notare il punto tra minuti e secondi)
Calimo

Ho scritto una funzione chiamata CpCreationDatein fish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal,

15

In Mac OS X sembrano esserci quattro diversi timestamp associati a un file. Queste informazioni temporali non sono sempre aggiornata indipendentemente l'uno dall'altro, ma si può avere un certo controllo individuale con un po 'di cura e con l'uso di touch, SetFilee chown(o chmod). Per vedere questo, sperimentiamo e creiamo un nuovo file dal prompt dei comandi #:

# touch a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

La prima data elencata è ora dell'ultimo accesso ( atime), la seconda è l'ora dell'ultima modifica ( mtime), la terza è l'ultima modifica dello stato ( ctime), la quarta è l'ora della creazione del file (nascita, Btime), vedere man lstat.

Per modificare il tempo di accesso ( atime) a un orario specificato utilizzare:

# touch -a -t201412312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "May 19 00:11:14 2015" "May 19 00:11:46 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Per modificare l'ora di modifica ( mtime) e l' ora di creazione del file ( Btime) in un orario specificato, utilizzare:

# touch -m -t201312312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 2013" 4096 0 0 a.txt

Apparentemente anche questo aggiorna automaticamente l'ora dell'ultimo cambio di stato ( ctime) all'ora di sistema corrente!

Per modificare solo il momento della creazione / nascita ( Btime) in un determinato momento, utilizzare (come proposto da altri sopra):

# SetFile -d "12/31/1999 23:59:59" a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

Per modificare solo l'ora dell'ultima modifica dello stato ( ctime) all'ora di sistema corrente, utilizzare ad esempio:

# chown username a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:13:45 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

dove usernameè il proprietario del file (come riportato da stato ls -l). Questo non cambia la proprietà del file, ma accede all'inode del file e lo registra come ora dell'ultima modifica dello stato. Sfortunatamente, non è possibile specificare l'ora qui esplicitamente se non cambiando l'ora del computer ...

In sintesi, per poter cambiare i quattro timestamp in modo indipendente, è possibile utilizzare (in questo ordine per gli ultimi 3):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [imposta la data di sistema] chown username <file>[ripristina la normale data di sistema]

(Naturalmente, reimpostare la data del sistema potrebbe non essere un'operazione senza rischi, sei stato avvisato.)


+1 Grazie per questa risposta super dettagliata. Questo ha risolto tutti i miei guai.
Govind Rai,

13

Il comando da riga di touchcomando funziona in Lion, ma è necessario un piccolo background su come usarlo.

Innanzitutto, è necessario digitarlo, non è un'utilità che funziona graficamente in una finestra. Il luogo in cui lo digiti è un'app chiamata Terminale . Puoi trovarlo nella cartella Utilità o utilizzare la ricerca Spotlight per trovarlo.

Una volta avviato, si ottiene una finestra della riga di comando in cui è possibile digitare i comandi. Solo perché stai scrivendo non significa che non abbia nulla a che fare con la codifica, ma a qualcuno che non conosce comandi "vecchio stile" può sembrare un po 'intimidatorio.

Quindi, il comando si chiama touch e dopo il comando è possibile passare vari parametri, l'unico richiesto è il nome file. Digitando quanto segue imposterà l'ultima data modificata del file sull'ora corrente:

touch filename

Naturalmente, potresti dover prima trovare il file, che potrebbe richiedere ulteriori comandi per raggiungerlo. il comando cd o Cambia directory aiuta qui:

cd ~/Desktop/files/PDFs
touch filename

In alternativa, puoi semplicemente aggiungere il percorso completo al file come parte del comando:

touch ~/Desktop/files/PDFs/filename

L'uso più avanzato del comando touch consente di specificare l'ora che si desidera impostare, anziché utilizzare l'ora in fase di esecuzione, impostare l'accesso anziché i tempi di modifica ecc. Questo è ciò che fanno parametri come -t e altri. Alcuni impostano il tempo come il tempo di un altro file, altri lo impostano per tornare indietro o in avanti nel tempo di una quantità X, ( vedi qui per maggiori dettagli), ad esempio:

touch -d '1 May 2005 10:22' file8

Quello che segue è da questa pagina che è anche utile riferimento e un ottimo esempio con alcuni suggerimenti per coloro che sono a disagio con le posizioni dei file sulla riga di comando

Nota che questo cambierà sia la data di modifica sia gli attributi di data di creazione solo se il tuo file è stato creato dopo la data inserita. Questo perché un file non può essere modificato prima che sia stato creato. Se creato prima della data impostata, verrà modificata solo la data modificata.

Come modificare l'attributo della data di creazione di un file?

  1. Apri l'applicazione Terminale ( /Applications/Utilities/Terminal.app) o se preferisci usare iTerm.

  2. Digita questo nel Terminale (senza premere invio / ritorno) inserendo la data nel formato di YYYYMMDDhhmm:

    touch -t 201212211111
    
  3. Apri una finestra del Finder e individua il file che desideri modificare e trascinalo nella finestra Terminale, quindi inserirà la posizione del file usando la terminologia della riga di comando. Ecco un esempio di ciò che dovrebbe essere digitato nel Terminale a questo punto:

    touch -t 201212211111 /Volumes/Mac\ HD/Pictures/somefile.jpg
    

    201212211111 nell'esempio sopra rappresentano “21 dicembre 2012 11:11


2
Ma touchmodifica la data modificata, non la data di creazione del file.
Daniel

1
Può fare entrambe le cose. Dipende dai parametri.
stuffe,

2
L'utilizzo touchcon i parametri sopra indicati ha modificato la modifica ma non le date di creazione del mio file di prova.
Daniel

2
@Daniel Probabilmente hai ottenuto la tua risposta, ma per completezza touch si modifica la data di creazione in base agli argomenti. Se si fornisce una data di modifica precedente alla data di creazione del file, la data di creazione passerà automaticamente al nuovo valore della data di modifica, poiché un file non può essere modificato prima della sua creazione.
Govind Rai,

2
Ho appena provato questo su Sierra e il tocco sicuramente non cambia la creationdata. Sono stato in grado di cambiare accesse le modifieddate a una "data nel passato", ma non ha modificato la data di creazione. Controlla la pagina man per il tocco, non menziona la data di creazione. File system: Mac OS esteso (journal, crittografato). Usando ha SetFile -d "$(GetFileInfo -m test.txt)" file.txtfunzionato perfettamente.
Jonathan Cross,

7

I suggerimenti suggeriscono qui, in particolare l'ultimo (da Lauri Ranta, risposto il 21 agosto alle 15:21). Perfekt!

Ora utilizzo un semplice flusso di lavoro di Automator per modificare in batch più file:

  1. Ottieni elementi del Finder selezionati
  2. Esegui script shell, "Passa input: come argomenti"

Lo script della shell è:

for f in "$@"
do
    SetFile -d "$(GetFileInfo -m "$f")" "$f" 
done

Funziona come un fascino.


0

Il modo più semplice che ho trovato è stato quello di creare una nuova cartella, copiare tutte le sottocartelle della cartella in grigio nella nuova cartella e, voilà, la nuova cartella non è in grigio. Puoi persino farlo nel Finder.

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.