예를 들어, 나는 내 시간이 몇 시간만큼 상쇄된다는 것을 알고 있습니다(아마도 내 시스템 시계가 어느 시점에서 몇 시간 앞당겨졌기 때문일 것입니다). 이 경우 특정 디렉터리에 있는 모든 파일의 "마지막 수정" 날짜를 어떻게 일괄 변경합니까?
파일마다 수정 시간을 다른 값으로 변경해야 합니다.
답변1
파일 수정 시간에 상대 오프셋을 적용하려면 touch(1)
및 를 조합하여 수행 할 수 있습니다 stat(1)
. touch는 상대 시간을 지원하지만 파일의 현재 시간이 아닌 현재 시간을 기준으로 합니다. 대신 stat를 사용하여 현재 수정 시간을 가져오고 오프셋을 적용할 수 있습니다.
예를 들어, 파일 수정 시간에 -2시간 오프셋을 적용하려면 다음을 수행하세요.
touch -m -d @$(( $(stat -c %Y file.txt) - 7200 )) file.txt
stat -c %Y file.txt
file.txt
에포크 이후의 수정 시간을 초 단위로 가져옵니다. 배쉬를 사용하여산술 확장, 계산을 할 수 있습니다. 이 경우에는 7200초(2시간)를 뺍니다. 터치 -m
변경 수정 시간을 이용하고 -d
날짜를 지정하면 수정 시간을 계산된 시간으로 설정할 수 있습니다. 이는 @
주어진 시간이 에포크 이후의 초 단위임을 나타내는 시간 형식 지정자입니다.
이를 쉘 스크립트에 넣으면 거기에서 호출하거나 find
find xargs
를 사용하여 변경하려는 파일을 선택할 수 있습니다.
#!/bin/bash
for file ; do
touch -m -d @$(( $(stat -c %Y "$file") - 7200 )) "$file"
done
그러면 인수로 전달된 모든 파일의 수정 시간에 변경 사항이 적용됩니다.
답변2
적시에 파일을 수동으로 수정합니다( 사용 touch ... TEMPLATE
).
그런 다음 해당 파일을 참조하여 (using) 나머지를 변경하십시오 touch -r TEMPLATE TARGET
.
답변3
touch -m -r file.txt -d '-1 hour' file.txt