Saya tahu cara mengubah stempel waktu dari file biasa:
touch -t 201301291810 myfile.txt
Saya tidak dapat melakukan hal yang sama dengan symlink. Apa itu mungkin?
Distro: RHEL 5.8
Saya tahu cara mengubah stempel waktu dari file biasa:
touch -t 201301291810 myfile.txt
Saya tidak dapat melakukan hal yang sama dengan symlink. Apa itu mungkin?
Distro: RHEL 5.8
Jawaban:
tambahkan switch -h
touch -h -t 201301291810 myfile.txt
Mandatory arguments to long options are mandatory for short options too.
-a change only the access time
-c, --no-create do not create any files
-d, --date=STRING parse STRING and use it instead of current time
-f (ignored)
-h, --no-dereference affect each symbolic link instead of any referenced
file (useful only on systems that can change the
timestamps of a symlink)
-m change only the modification time
-r, --reference=FILE use this file's times instead of current time
-t STAMP use [[CC]YY]MMDDhhmm[.ss] instead of current time
Anda mungkin memerlukan versi yang lebih baru touch
. Jika ini bukan opsi, dan jika Anda tahu C, Anda bisa menulis sebuah program kecil untuk melakukannya sendiri menggunakan fungsi lutimes .
Cara brute force adalah sebagai berikut:
0. delete the old symlink you wish to change
1. change the system date to whatever date you want the symlink to be
2. remake the symlink
3. return the system date to current.
Batas dan waktu tautan simbolis dapat diubah menggunakan lutimes
fungsi. Program berikut ini berfungsi untuk saya di MacOSX dan Linux untuk menyalin dua kali dari file sewenang-wenang ke tautan simbolis:
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
int
main(int argc, char **argv)
{
struct timeval times[2];
struct stat info;
int rc;
if (argc != 3) {
fprintf(stderr, "usage: %s source target\n", argv[0]);
return 1;
}
rc = lstat(argv[1], &info);
if (rc != 0) {
fprintf(stderr, "error: cannot stat %s, %s\n", argv[1],
strerror(errno));
return 1;
}
times[0].tv_sec = info.st_atime;
times[0].tv_usec = 0;
times[1].tv_sec = info.st_mtime;
times[1].tv_usec = 0;
rc = lutimes(argv[2], times);
if (rc != 0) {
fprintf(stderr, "error: cannot set times on %s, %s\n", argv[2],
strerror(errno));
return 1;
}
return 0;
}
Jika Anda memanggil file yang dikompilasi copytime
, maka perintah tersebut copytime file link
dapat digunakan untuk membuat tautan memiliki atime dan mtime yang sama seperti file
halnya. Seharusnya tidak terlalu sulit untuk memodifikasi program untuk menggunakan waktu yang ditentukan pada baris perintah daripada menyalin waktu dari file lain.