Kaip pakeisti failo pakeitimo / sukūrimo datą?

Ar yra būdas pakeisti datą, kada failas buvo pakeistas / sukurtas (kuri rodoma programoje "Nautilus" arba naudojant komandą ls -l)? Idealiu atveju ieškau komandos, kuria būtų galima pakeisti visų failų datas ir (arba) laikus, kad jie būtų rodomi tam tikru laiko tarpu anksčiau arba vėliau (pvz., +8 valandos arba -4 dienos ir t. t.).

Jei esate failo savininkas (arba root), galite keisti failo modifikavimo laiką naudodami touch komandą:

touch filename

Pagal numatytuosius nustatymus failo modifikavimo laikas bus dabartinis laikas, tačiau yra daugybė žymų, pavyzdžiui, -d žyma, leidžianti pasirinkti konkrečią datą. Taigi, pavyzdžiui, norėdami nustatyti, kad failas buvo modifikuotas prieš dvi valandas iki dabartinės dienos, galite naudoti šią frazę:

touch -d "2 hours ago" filename

Jei norite pakeisti failą pagal esamą jo pakeitimo laiką, tai galite padaryti taip:

touch -d "$(date -R -r filename) - 2 hours" filename

Jei norite pakeisti daug failų, galite naudoti šiuos veiksmus:

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

Galite pakeisti argumentus į find, kad pasirinktumėte tik jus dominančius failus. Jei norite tik atnaujinti failų modifikavimo laiką dabartinio laiko atžvilgiu, galite tai supaprastinti taip:

find DIRECTORY -exec touch -d "2 hours ago" {} +

Tokia forma neįmanoma naudojant failo laiko santykinę versiją, nes ji naudoja apvalkalą touch argumentams formuoti.

Kalbant apie sukūrimo laiką, dauguma "Linux" failų sistemų šios reikšmės neseka. Su failais yra susietas ctime, bet jis seka, kada paskutinį kartą buvo pakeisti failo metaduomenys. Jei failo leidimai niekada nebuvo keičiami, gali atsitikti taip, kad jame bus išsaugotas sukūrimo laikas, tačiau tai yra atsitiktinumas. Aiškus failo modifikavimo laiko keitimas laikomas metaduomenų keitimu, todėl taip pat turės šalutinį poveikį - bus atnaujintas ctime.

Komentarai (12)

Ačiū už pagalbą. Man tai pavyko:

Terminale eikite į katalogą data-edit. Tada įveskite:

find -print | while read filename; do
    # do whatever you want with the file
    touch -t 201203101513 "$filename"
done

Paspaudę Enter, pamatysite ">", išskyrus paskutinį kartą -> "done".

Pastaba: Galbūt norėsite pakeisti "201203101513"

"201203101513" = yra data, kurią norite nustatyti visiems šio katalogo failams.

Žr. mano tinklalapį

Komentarai (2)

tiesiog pakeiskite datą ir laiką nustatymuose. tada išsaugokite failą, jis automatiškai pasikeis.

Komentarai (5)