touch -m과 함께 사용할 수 있는 수정된 날짜를 가져옵니다.

touch -m과 함께 사용할 수 있는 수정된 날짜를 가져옵니다.

를 사용할 수 있도록 파일의 수정된 날짜를 가져와야 합니다 touch -m.

stat아니면 perl -le 'print((stat shift)[9])'내가 원하는 것을 반환하지 않습니다. -와 +를 사용해야 한다고 생각하지만 올바르게 사용하는 방법을 잘 모르겠습니다.

I를 사용하여 -t다른 방법으로 설정하는 것도 가능하지만 여기서는 2013년 7월 3일로 설정하려고 합니다.

touch -t  20130703

그러나 그것은 내가 원하는 대로 바뀌지 않았습니다. 그럼 질문으로 돌아가서, 를 사용하여 설정할 수 있도록 다른 파일 속성을 어떻게 복사합니까 touch -m?

답변1

stat명령을 사용하여 반환된 시간을 perl원하는 형식으로 변환할 수 있습니다.date(GNU coreutils가 설치되어 있다고 가정):

# Convert UNIX time returned by perl to year+month+day
$ date -d @$(perl -le 'print((stat shift)[9])' FILENAME) +%Y%m%d
20130703

# Convert formatted time returned by GNU stat to year+month+day
$ date -d "$(stat -c %y FILENAME)" +%Y%m%d
20130703

date또한 파일 수정 시간을 직접 제공할 수도 있습니다.

$ date -r FILENAME +%Y%m%d
20130703

자세한 내용은 다음을 참조하세요.GNU 날짜 매뉴얼 페이지( man date).

답변2

stat -f %m -t %Y%m%d%H%M.%S myfile

그러면 원하는 형식으로 타임스탬프가 인쇄됩니다 touch -t.

타임스탬프는 현지 시간대로 표현됩니다. 이는 시간대 간에 파일을 이동하거나 DST가 적용되는 시간대에서 여름에서 겨울로 전환할 때 반복되는 시간의 타임스탬프에 적합하지 않을 수 있습니다. 시간대 문제를 방지하려면 UTC 타임스탬프를 사용하세요.

timestamp=$(TZ=UTC stat -f %m -t %Y%m%d%H%M.%S myfile)
TZ=UTC touch -t "$timestamp" myotherfile

이는 statGNU 또는 BusyBox stat유틸리티(예: Linux의 유틸리티)가 아닌 BSD 유틸리티(예: OSX와 함께 제공되는 유틸리티)에 적용됩니다.

답변3

쉽게 편집할 수 있는 다른 정보가 많이 있지만 "ls -otr --time-style=+%Y%m%d%H%M.%S"를 수행하면 올바른 형식의 날짜를 얻을 수 있습니다.

이는 별칭을 할당하고 출력을 파일로 리디렉션할 때 편리합니다.

답변4

질문에 태그가 지정되었으므로, 사용자가 macOS를 사용하고 있다고 가정하겠습니다.

macOS의 유틸리티에는 touch해당 옵션을 사용할 -m때 파일의 수정 타임스탬프를 설정하는 기능이 있습니다. 이제 문제는 touch -m단일 파일을 "참조 파일"로 사용하여 여러 파일의 수정 타임스탬프를 설정하는 방법을 찾는 것입니다.

stat사용자는 참조 파일에서 수정 타임스탬프를 구문 분석하는 것을 권장 하지만 touchmacOS의 유틸리티는 다음 명령을 사용하여 이를 직접 수행할 수 있습니다 -r file.

touch -m -r reference_file file1 file2 file3

file1위 명령은 및 file2의 수정 타임스탬프를 file3파일 이름의 수정 타임스탬프와 동일한 타임스탬프 로 설정합니다 reference_file.

사용자가 (언급한 대로) 어딘가에 있는 파일이나 디렉터리의 원래 타임스탬프를 추적하려는 경우댓글에서), 나중에 복원할 수 있도록 빈 파일을 만들고 touch -m위와 같이 를 사용하여 타임스탬프를 설정하면 됩니다 -r. 언제든지 타임스탬프를 구문 분석할 필요가 없습니다 stat.

# create an empty file to hold the original timestamp
touch -m -r original empty

# do stuff to the original

# restore timestamp on the original
touch -m -r empty original
rm empty

관련 정보