심볼릭 링크의 타임 스탬프 변경


31

일반 파일의 타임 스탬프를 변경하는 방법을 알고 있습니다.

touch -t 201301291810 myfile.txt

심볼릭 링크를 사용하여 동일한 작업을 수행 할 수 없었습니다. 가능합니까?

배포판 : 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
"symlink의 타임 스탬프를 변경할 수있는 시스템에서만 유용한"인용문을보십시오.
mdpc

3
또한 최근에 추가 된 것입니다 ( 2010 년이 맨 페이지에 없음 ). 아마도 그는 최신 버전의 coreutils를 얻어야 할 것입니다. 2009 년에 추가되었을 때의 차이점은 다음과 같습니다.
Random832

이것이 정답이면 그대로 표시하십시오.
qodeninja

@qodeninja 6 년이 지난 후에도 OP가 어떤 식 으로든 표시 할 것으로 기대하지는 않습니다.
Stephan


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, 시스템 날짜를 아직 수정하지 않은 상태에서 생성 된 모든 파일에는 타임 스탬프도 있습니다.
Aquarius Power

한 번 생성 된 심볼릭 링크 inode를 수정할 수 없기 때문입니다.
mdpc 2016

0

기호 링크의 atime 및 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. 다른 파일에서 시간을 복사하는 대신 명령 줄에 지정된 시간을 사용하도록 프로그램을 수정하는 것은 어렵지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.