C'è un modo per cambiare la data in cui un file è stato modificato/creato (che è mostrata in Nautilus o con il comando ls -l)? Idealmente sto cercando un comando che possa cambiare la data/ora di un intero gruppo di file in una certa quantità di tempo prima o dopo (ad esempio +8 ore o -4 giorni ecc.).
Finché sei il proprietario del file (o root), puoi cambiare il tempo di modifica di un file usando il comando touch
:
touch filename
Per default questo imposterà il tempo di modifica del file all'ora corrente, ma ci sono un certo numero di flag, come il flag -d
per scegliere una data particolare. Così, per esempio, per impostare un file come modificato due ore prima del presente, si può usare quanto segue:
touch -d "2 hours ago" filename
Se invece vuoi modificare il file relativamente al suo tempo di modifica esistente, il seguente dovrebbe fare il trucco:
touch -d "$(date -R -r filename) - 2 hours" filename
Se volete modificare un gran numero di file, potreste usare il seguente:
find DIRECTORY -print | while read filename; do
# do whatever you want with the file
touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done
Puoi cambiare gli argomenti in find
per selezionare solo i file che ti interessano. Se vuoi solo aggiornare i tempi di modifica dei file rispetto al tempo presente, puoi semplificare la cosa in questo modo:
find DIRECTORY -exec touch -d "2 hours ago" {} +
Questa forma non è possibile con la versione relativa al tempo dei file perché usa la shell per formare gli argomenti di touch
.
Per quanto riguarda il tempo di creazione, la maggior parte dei file system Linux non tiene traccia di questo valore. C'è un ctime
associato ai file, ma tiene traccia di quando i metadati del file sono stati cambiati l'ultima volta. Se il file non ha mai cambiato i suoi permessi, potrebbe accadere che tenga il tempo di creazione, ma questa è una coincidenza. Cambiare esplicitamente il tempo di modifica del file conta come un cambiamento di metadati, quindi avrà anche l'effetto collaterale di aggiornare il ctime
.
Grazie per l'aiuto. Questo ha funzionato per me:
Nel terminale vai alla directory di date-edit. Poi digitate:
find -print | while read filename; do
# do whatever you want with the file
touch -t 201203101513 "$filename"
done
Vedrete un ">" dopo aver premuto invio, eccetto per l'ultima volta -> "done".
Nota: Potresti voler cambiare "201203101513"
"201203101513" = è la data che vuoi per tutti i file in questa directory.