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
.
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.
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
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' '{}'
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
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.