특정 디렉토리의 "마지막 수정" 날짜를 일괄 변환하는 방법은 무엇입니까?

특정 디렉토리의 "마지막 수정" 날짜를 일괄 변환하는 방법은 무엇입니까?

예를 들어, 나는 내 시간이 몇 시간만큼 상쇄된다는 것을 알고 있습니다(아마도 내 시스템 시계가 어느 시점에서 몇 시간 앞당겨졌기 때문일 것입니다). 이 경우 특정 디렉터리에 있는 모든 파일의 "마지막 수정" 날짜를 어떻게 일괄 변경합니까?

파일마다 수정 시간을 다른 값으로 변경해야 합니다.

답변1

파일 수정 시간에 상대 오프셋을 적용하려면 touch(1)및 를 조합하여 수행 할 수 있습니다 stat(1). touch는 상대 시간을 지원하지만 파일의 현재 시간이 아닌 현재 시간을 기준으로 합니다. 대신 stat를 사용하여 현재 수정 시간을 가져오고 오프셋을 적용할 수 있습니다.

예를 들어, 파일 수정 시간에 -2시간 오프셋을 적용하려면 다음을 수행하세요.

touch -m -d @$(( $(stat -c %Y file.txt) - 7200 )) file.txt

stat -c %Y file.txtfile.txt에포크 이후의 수정 시간을 초 단위로 가져옵니다. 배쉬를 사용하여산술 확장, 계산을 할 수 있습니다. 이 경우에는 7200초(2시간)를 뺍니다. 터치 -m변경 수정 시간을 이용하고 -d날짜를 지정하면 수정 시간을 계산된 시간으로 설정할 수 있습니다. 이는 @주어진 시간이 에포크 이후의 초 단위임을 나타내는 시간 형식 지정자입니다.

이를 쉘 스크립트에 넣으면 거기에서 호출하거나 findfind 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

관련 정보