Я знаю, як змінити часову позначку звичайного файлу:
touch -t 201301291810 myfile.txt
Я не зміг зробити те ж саме із симпосиланням. Це можливо?
Distro: RHEL 5.8
Я знаю, як змінити часову позначку звичайного файлу:
touch -t 201301291810 myfile.txt
Я не зміг зробити те ж саме із симпосиланням. Це можливо?
Distro: RHEL 5.8
Відповіді:
додати перемикач -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
Можливо, вам знадобиться більш нова версія версії touch
. Якщо це не варіант, і якщо ви знаєте C, ви можете написати невелику програму, щоб зробити це самостійно за допомогою функції lutimes .
Грубий спосіб полягає в наступному:
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.
Час символічного зв'язку та mtime може бути змінено за допомогою lutimes
функції. Наступна програма працює для мене на MacOSX та Linux, щоб копіювати обидва рази з довільного файлу на символічне посилання:
#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;
}
Якщо ви викликаєте компільований файл copytime
, тоді команда copytime file link
може бути використана для того, щоб зробити посилання тим самим atime і mtime, як file
і. Змінювати програму не повинно бути надто складно, щоб використовувати часи, вказані в командному рядку, а не копіювати часи з іншого файлу.