링크가 대상 파일과 동일한 타임스탬프를 갖도록 만드는 방법

링크가 대상 파일과 동일한 타임스탬프를 갖도록 만드는 방법

file주어진 파일이 있다고 가정하십시오 mtime. 심볼릭 링크 자체 sym를 가리키는 심볼릭 링크를 생성하면 의 -stamp와는 다른 생성 시간에 해당하는 -stamp를 얻게 됩니다 .fileln -smtimesymlinkmtimefile

mtime그렇다면 가리키는 파일과 동일한 심볼릭 링크를 만드는 방법이 있습니까 ?

이 질문의 배경은이것클라우드 이미지의 최신 n개 파일에 대한 링크 디렉터리를 생성하는 스크립트입니다. 이제 ls -lt이 디렉토리에서 이 작업을 수행 하면 current실제 파일의 생성 날짜를 표시하는 대신 심볼릭 링크 생성 날짜가 표시됩니다. 그런데 파일 생성 날짜를보고 싶습니다.

편집하다 원래 게시물에서 실수로 ctime을 요청했지만(위에서 변경했습니다) 질문은 mtime에 관한 것이어야 합니다. 이 점을 지적해주신 @ilkkachu에게 감사드립니다.

답변1

ctime이나 mtime을 말하는 건가요? Ctime은 파일 메타데이터(inode 내용)가 마지막으로 변경된 시간입니다.또는문서 내용. 쓰기 시 업데이트되지만 권한이 변경될 때도 업데이트됩니다. mtime은 파일 데이터가 마지막으로 기록된 시간이며 변경할 수 있지만 touchctime은 일반적으로 변경할 수 없습니다.

복제본에 대해 재설정할 수 있으므로 일반적으로 mtime이 더 유용합니다. 또한 표시됩니다 ls -lt(ctime을 표시하려면 추가해야 함 -c).

touch -h다음을 사용하여 심볼릭 링크의 런타임을 변경할 수 있습니다 .

$ ls -lt
total 4
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Sep  4 15:10 link.txt -> hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31  1999 hello.txt

$ touch -h -r hello.txt  link.txt 
$ ls -lt
total 4
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31  1999 hello.txt
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Dec 31  1999 link.txt -> hello.txt

하지만 이 작업은 여전히 ​​수동으로 수행해야 하며 대상 파일이 변경되면 자동으로 업데이트되지 않습니다. 그러나 ls -L링크 자체가 아닌 대상 파일의 세부 정보를 인쇄 하도록 할 수 있습니다 .

$ touch hello.txt 
$ ls -L -lt
total 8
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep  4 15:12 hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep  4 15:12 link.txt

물론 링크라는 사실도 숨긴다.

링크 이름과 대상, 지정된 파일의 날짜와 소유권을 표시하는 혼합 출력이 필요한 경우 Perl과 같은 도구를 사용하여 목록을 만들 수 있습니다.

답변2

ln또는 touch시스템 호출 은 모두 변경할 utimensat수 없으며 & ctime만 변경할 수 있습니다 .mtimeatime

이게 네 일이라면진짜수행해야 하는 경우 유일한 옵션은 자체 시스템 호출/커널 모듈/사용자 공간 exe를 실행하는 것입니다.

답변3

아니요, 심볼릭 링크 자체에는 유용한 메타데이터(타임스탬프, 소유자, 권한)가 없습니다.

그러나 with를 사용 -H하면 ls심볼릭 링크를 역참조(즉, 팔로우)할 수 있습니다. 아니면 .-Lstat

또는 readlink -e연결된 질문에 대한 내 답변에서 as를 사용하여 해당 심볼릭 링크가 가리키는 전체 정식 경로 이름을 얻을 수 있습니다.

관련 정보