Tôi biết cách thay đổi dấu thời gian của một tệp thông thường:
touch -t 201301291810 myfile.txt
Tôi đã không thể làm điều tương tự với một liên kết tượng trưng. Có thể không?
Phân phối: RHEL 5,8
Tôi biết cách thay đổi dấu thời gian của một tệp thông thường:
touch -t 201301291810 myfile.txt
Tôi đã không thể làm điều tương tự với một liên kết tượng trưng. Có thể không?
Phân phối: RHEL 5,8
Câu trả lời:
thêm công tắc -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
Bạn có thể cần một phiên bản gần đây hơn touch
. Nếu đây không phải là một tùy chọn và nếu bạn biết C, bạn có thể viết một chương trình nhỏ để tự thực hiện bằng chức năng lutimes .
Một cách vũ phu như sau:
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.
Thời gian và thời gian của một liên kết tượng trưng có thể được thay đổi bằng cách sử dụng lutimes
chức năng. Chương trình sau đây hoạt động với tôi trên MacOSX và Linux để sao chép cả hai lần từ một tệp tùy ý sang một liên kết tượng trưng:
#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;
}
Nếu bạn gọi tệp đã biên dịch copytime
, thì lệnh copytime file link
có thể được sử dụng để tạo liên kết có cùng thời gian và thời gian file
. Không nên quá khó để sửa đổi chương trình để sử dụng thời gian được chỉ định trên dòng lệnh thay vì sao chép thời gian từ tệp khác.