Is er een manier om de datum te wijzigen waarop een bestand is gewijzigd/aangemaakt (die wordt weergegeven in Nautilus of met het ls -l commando)? Idealiter ben ik op zoek naar een commando dat de datum/tijdstempels van een heleboel bestanden kan wijzigen naar een bepaalde tijd vroeger of later (bijv. +8 uur of -4 dagen enz.).
Zolang je de eigenaar van het bestand bent (of root), kun je de wijzigingstijd van een bestand veranderen met het touch
commando:
touch filename
Standaard zal dit de wijzigingstijd van het bestand instellen op de huidige tijd, maar er zijn een aantal vlaggen, zoals de -d
vlag om een bepaalde datum te kiezen. Dus om bijvoorbeeld een bestand in te stellen als zijnde gewijzigd twee uur voor het heden, zou je het volgende kunnen gebruiken:
touch -d "2 hours ago" filename
Als u het bestand wilt wijzigen ten opzichte van de bestaande wijzigingstijd, dan zou het volgende moeten werken:
touch -d "$(date -R -r filename) - 2 hours" filename
Als u een groot aantal bestanden wilt wijzigen, kunt u het volgende gebruiken:
find DIRECTORY -print | while read filename; do
# do whatever you want with the file
touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done
U kunt de argumenten veranderen in find
om alleen de bestanden te selecteren waarin u geïnteresseerd bent. Als je alleen de bestand modificatie tijden wilt updaten ten opzichte van de huidige tijd, kun je dit vereenvoudigen tot:
find DIRECTORY -exec touch -d "2 hours ago" {} +
Deze vorm is niet mogelijk met de bestandstijd relatieve versie omdat het de shell gebruikt om de argumenten voor touch
te vormen.
Wat de aanmaaktijd betreft, de meeste Linux bestandssystemen houden deze waarde niet bij. Er is wel een ctime
gekoppeld aan bestanden, maar die houdt bij wanneer de metadata van het bestand voor het laatst is gewijzigd. Als de permissies van een bestand nooit zijn gewijzigd, kan het gebeuren dat de aanmaaktijd wordt aangehouden, maar dat is toeval. Expliciet de wijzigingstijd van een bestand wijzigen telt als een metadata wijziging, dus zal ook het neveneffect hebben dat de ctime
wordt bijgewerkt.
Bedankt voor de hulp. Dit werkte voor mij:
Ga in de terminal naar de map voor datum-edit. Type dan:
find -print | while read filename; do
# do whatever you want with the file
touch -t 201203101513 "$filename"
done
Je ziet een ">" nadat je op enter hebt gedrukt, behalve voor de laatste keer -> "done".
Opmerking: Misschien wilt u "201203101513" veranderen;
"201203101513" = is de datum die je wilt voor alle bestanden in deze directory.