생성 시간이 포함되어 있음을 이해하기 -a
위해 일부 디렉토리를 복사했습니다 .preserve=all
cp -a ./* /mnt/destination/
대상의 결과 디렉터리를 확인하면 생성 시간이 현재 시간으로 설정되어 있으며,그리고 그 내용은 창작 당시를 보존하는 것 같습니다.
왜 생성 날짜가 아닌가?최상위 수준디렉토리가 유지됩니까?
소스는 HFS+이고 대상은 btrfs입니다.
대상 및 소스에 대한 디렉토리 목록 발췌:
$ ls -hal --time=creation
total 16K
drwxrwxr-x 1 andreas andreas 74 sep 2 23:25 .
drwx------ 1 andreas andreas 310 apr 26 17:08 ..
drwx------ 1 andreas andreas 2,3K sep 2 23:45 Library
$ ls -hal --time=creation /mnt/source
total 8,1M
drwxrwxr-x 1 andreas andreas 15 mar 28 2022 .
drwxr-x---+ 3 root root 4,0K aug 9 2022 ..
drwx------ 1 andreas andreas 95 apr 15 2019 Library
고쳐 쓰다
답변과 댓글을 통해 하위 디렉토리의 날짜를 확인했을 때 제가 실수를 했음이 틀림없다는 결론에 도달했습니다. 내가 해냈어. 내 잘못 – 결과에 대한 기대가 내 비전을 흐리게 했습니다. 질문의 이 부분이 제거되었습니다.
답변1
전통적인 유닉스 파일 시스템에는 생성 시간이 없고 ctime만 있습니다. 시간은변화시간이 아니라 창조 시간이다. 시간 변경은 현재 시간으로 변경되지 않는 한 운영 체제 호출을 통해 설정할 수 없습니다. 권한을 변경하거나 atime 또는 mtime을 변경하면 ctime이 현재 시간으로 설정됩니다.
생성 시간은 POSIX의 일부가 아니지만 많은 파일 시스템에서 이를 추가하는 것 같습니다.Linux 저장소 생성 시간의 파일 시스템은 무엇입니까?
하지만 이를 지원하는 파일 시스템에서도 표준화되어 있지 않기 때문에 POSIX 도구에서 생성 시간 지원이 보장되지 않으며, 이를 지원하는 파일 시스템에서도 설정이 불가능할 수 있다. 때로는 설정되고 때로는 잘못 설정되거나 일관되지 않게 설정되는 경우 다양한 지원과 관련된 여러 도구가 있거나 해당 도구가 부분적인 지원만 제공할 수 있습니다.
Linux 특정 statx
함수 호출은 atime, btime, ctime 및 mtime을 지원합니다.시간생성 시간이 표시되어 있습니다. 그러나 이것은 단지 읽는 시간일 뿐입니다. (다양한 파일 시스템은 생성 시간, btime, crtime 및 otime을 포함하여 다양한 방식으로 생성 시간을 참조합니다.)
더 자세히 살펴보면 gnu coreutils cp는 utimensat
POSIX-1.2008을 준수한다고 주장하는 함수 호출을 통해 설정 시간을 기록합니다. 이 호출은 수정만 지원합니다.아르템그리고시간하지만 이것을 살펴보면 POSIX가 atime과 mtime만 지원하기 때문인지(ctime은 설정 가능하지 않음), 아니면 ctime과 btime이 기본적으로 변경 불가능하고 운영 체제에 의한 변경만 허용하고 적절하게 설정하기 때문인지 알 수 없습니다. 현재 이벤트 시간입니다.
답변2
임의의 값으로 설정할 수 있는 유일한 타임스탬프( utime()
, utimes()
, utimensat()
, futimens()
시스템 호출 사용)는 다음과 같습니다.마지막 수정일명 타임섬마지막 액세스 시간아템이라고도 합니다.
이것상태 시간 변경일명 ctime과출생/창조 시간(btime/crtime)은 지원되지 않습니다.서서히 나아가는(임의 설정) 따라서 cp -a
다른 소프트웨어와 마찬가지로 생성 시간이 생성 시간과 일치하는 파일을 생성할 수 없습니다.
ln foo bar
내부 실행 cp foo bar
또는 -l
GNU 옵션을 사용하면 동일한 타임스탬프(생성 시간 포함)가 생성 cp
되지만 이 경우 및 은 동일한 파일(두 개의 다른 이름 포함)입니다.bar
foo
foo
bar