Зміна часової позначки симпосилання


31

Я знаю, як змінити часову позначку звичайного файлу:

touch -t 201301291810 myfile.txt

Я не зміг зробити те ж саме із симпосиланням. Це можливо?

Distro: RHEL 5.8


2
Яку проблему ви намагаєтеся вирішити?
mdpc

2
Але чому .... яку ще глобальну проблему ви намагаєтеся вирішити? Це просто астетики, чи це має реальне призначення?
mdpc

7
це не має значення. Я не
заходжу

5
Цей тип інформації допомагає нам усім дійти до рішення, яке б працювало для вас. Це не є непотрібним. Вибачте, що ви такі чутливі, я просто намагаюся допомогти.
mdpc

4
чувак, це не має значення. просто йдіть з необхідністю зміни часової позначки як заданої постійної, незмінної. Ви можете допитати це все, що хочете, але це не змінюється з мого кінця. що робить опитування майже марним, ефективним. удачі
амфібій

Відповіді:


45

додати перемикач -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 -h -t 201301291810 mysymlink -> touch: недійсний варіант - h Спробуйте `touch --help 'для отримання додаткової інформації.
амфібій

2
подивіться на цитату "корисно лише в системах, які можуть змінювати часові позначки символьної посилання".
mdpc

3
Він також був доданий лише нещодавно (його немає на цій сторінці з 2010 року ). Можливо, йому потрібно просто отримати останню версію coreutils. Ось
відмінність,

Якщо це правильна відповідь, будь ласка, позначте її як таку.
qodeninja

@qodeninja Після шести років я не очікую, що ОП відзначить це так чи інакше.
Стефан

3

Можливо, вам знадобиться більш нова версія версії touch. Якщо це не варіант, і якщо ви знаєте C, ви можете написати невелику програму, щоб зробити це самостійно за допомогою функції lutimes .


0

Грубий спосіб полягає в наступному:

 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.

мене викликало цікавість, яка система цього вимагає? btw, будь-який файл, створений, поки ви ще не встановили дату синтезу, матиме і цю часову позначку
Power Aquarius

Оскільки один із створених символьних посилань не може змінити один раз створений.
mdpc

0

Час символічного зв'язку та 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і. Змінювати програму не повинно бути надто складно, щоб використовувати часи, вказані в командному рядку, а не копіювати часи з іншого файлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.