Bagaimana saya bisa mengubah tanggal diubah/dibuat dari file?

Apakah ada cara untuk mengubah tanggal ketika sebuah file yang diubah/dibuat (yang ditampilkan di Nautilus atau dengan perintah ls-l)? Pilihan saya mencari perintah yang dapat mengubah tanggal/waktu perangko dari sekelompok file untuk jumlah tertentu dari waktu sebelumnya atau kemudian (misalnya +8 jam atau -4 hari dll.).

Asalkan anda adalah pemilik dari file (atau akar), anda dapat mengubah waktu modifikasi file menggunakan sentuh perintah:

touch filename

Secara default, ini akan mengatur file's waktu modifikasi untuk saat ini, tetapi ada sejumlah bendera, seperti -d bendera untuk memilih tanggal tertentu. Jadi misalnya, untuk mengatur file yang dimodifikasi dua jam sebelum saat ini, anda bisa menggunakan kode berikut:

touch -d "2 hours ago" filename

Jika anda ingin memodifikasi file relatif terhadap ada waktu modifikasi sebaliknya, berikut harus melakukan trik:

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

Jika anda ingin memodifikasi sebuah file dalam jumlah besar, anda bisa menggunakan kode berikut:

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

Anda dapat mengubah argumen untuk menemukan untuk memilih hanya file yang anda tertarik. Jika anda hanya ingin memperbarui file modifikasi kali relatif untuk saat ini, anda dapat menyederhanakan ini untuk:

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

Bentuk ini isn't mungkin dengan file waktu relatif versi karena menggunakan shell untuk membentuk argumen untuk menyentuh.

Sejauh penciptaan berjalannya waktu, sebagian besar sistem berkas Linux tidak melacak nilai ini. Ada ctime yang berhubungan dengan file, tetapi trek ketika file metadata terakhir diubah. Jika file tersebut tidak memiliki izin berubah, itu mungkin terjadi untuk mengadakan penciptaan waktu, tetapi ini adalah suatu kebetulan. Secara eksplisit mengubah waktu modifikasi file yang dianggap sebagai metadata berubah, sehingga juga akan memiliki efek samping memperbarui ctime.

Komentar (12)

Terima kasih untuk bantuan. Ini bekerja untuk saya:

Di terminal pergi ke direktori untuk tanggal-edit. Kemudian ketik:

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

Anda akan melihat sebuah ">" setelah anda tekan enter, exept untuk terakhir kali -> "selesai".

Catatan: Anda mungkin ingin mengubah "201203101513"

"201203101513" = adalah tanggal yang anda inginkan untuk semua file dalam direktori ini.

Lihat halaman web saya

Komentar (2)

Cara paling mudah diakses dan dimodifikasi akan sama:

touch -a -m -t 201512180130.09 fileName.ext

Dimana:

-a = accessed
-m = modified
-t = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

Jika anda ingin menggunakan SEKARANG hanya drop -t dan timestamp mereka.

Untuk memverifikasi mereka semua sama: stat fileName.ext

Lihat: sentuh pria

Komentar (3)

Sentuhan dapat referensi file's upload semua oleh dirinya sendiri, tidak perlu untuk memanggil date atau menggunakan perintah substitusi. Berikut ini's sedikit dari touch's halaman info:

`-r FILE' `--reference=FILE'
     Use the times of the reference FILE instead of the current time.
     If this option is combined with the `--date=TIME' (`-d TIME')
     option, the reference FILE's time is the origin for any relative
     TIMEs given, but is otherwise ignored.  For example, `-r foo -d
     '-5 seconds'' specifies a time stamp equal to five seconds before
     the corresponding time stamp for `foo'.  If FILE is a symbolic
     link, the reference timestamp is taken from the target of the
     symlink, unless `-h' was also in effect.

Misalnya, untuk menambahkan 8 jam untuk file's upload (file file yang dikutip hanya dalam kasus spasi, dll):

touch -r "file" -d '+8 hour' "file"

Menggunakan loop melalui semua file dalam dir saat ini:

for i in *; do touch -r "$i" -d '+8 hour' "$i"; done

I'telah mendengar bahwa menggunakan * dan membiarkan untuk memilih nama file itu sendiri lebih aman, tapi menggunakan cari -print0 | xargs -0 sentuh ... harus menangani paling karakter gila seperti baris, spasi, tanda petik, garis miring terbalik dalam nama file. (PS. cobalah untuk tidak menggunakan karakter gila di nama file yang di tempat pertama).

Misalnya, untuk menemukan semua file di thatdir yang nama dimulai dengan s, dan menambahkan satu hari untuk orang-orang file's dimodifikasi timestamp, gunakan:

find thatdir -name "s*" -print0 | xargs -0 -I '{}' touch -r '{}' -d '+1 day' '{}'
Komentar (0)

Script kecil ini setidaknya bekerja untuk saya

#!/bin/bash

# find specific files
files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in ${files}
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v -1m -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done
Komentar (1)

It's sudah lama sejak saya menulis setiap jenis Unix program, tapi aku sengaja mengatur tahun salah pada sekelompok foto Natal, dan aku tahu jika aku tak't mengubah tanggal dari tahun 2015 sampai tahun 2014 ini akan menjadi masalah di kemudian hari.

Mungkin, ini adalah tugas yang mudah, tapi aku didn't menemukan cara sederhana untuk melakukannya.

Saya memodifikasi script yang saya temukan di sini, yang awalnya digunakan untuk mengubah tanggal dengan minus satu bulan.

Berikut ini's asli script:

#!/bin/bash

# find specific files
files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in ${files}
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v -1m -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

Berikut ini's my modifikasi script yang dipaksa tanggal untuk tahun ini "2014":

#!/bin/bash 

# find specific files
#files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in $*
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v +1y -r $(stat -f %m  "${f}") +2014%m%d%H%M.%S) "${f}"
done

Sekarang saya menyadari bahwa saya bisa berbuat lebih banyak versi generik:

#!/bin/bash 

# find specific files
#files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in $*
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch (+1y adds a year "-1y" subtracts a year)
 # Below line subtracts a year
 touch -t $(date -v -1y -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
 # Below line adds a year
 # touch -t $(date -v +1y -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

Untuk menggunakan file ini anda akan perlu untuk menulis dan

chmod +x fn

untuk melaksanakan:

./fn files-to-change

fn=anda-nama-file-yang-ini-anda-perintah

Contoh

./fn *.JPG

akan mengubah tanggal dengan minus satu tahun dalam direktori di mana anda berada.

Komentar (1)

hanya mengubah tanggal dan waktu di pengaturan. kemudian simpan file anda, maka secara otomatis perubahan

Komentar (5)