파일 타임스탬프를 3개월씩 늘리는 방법(디렉토리 트리의 경우)은 무엇입니까?

파일 타임스탬프를 3개월씩 늘리는 방법(디렉토리 트리의 경우)은 무엇입니까?

touchLinux의 명령줄 유틸리티와 다음에서 찾은 예제를 보고 있습니다 .지도 시간, 액세스 또는 수정 타임스탬프를 지정된 시간, 현재 시간 또는 참조 파일로 변경하는 방법을 이해합니다.

그러나 나는 다음을 수행하고 싶습니다. 내 파일의 상대적인 기간(서로 상대적인)에는 잃어버리고 싶지 않은 귀중한 정보가 포함되어 있습니다. 하지만 실제보다 몇 달 더 젊어 보이려면 폴더의 모든 파일이 (재귀적으로) 필요합니다. 따라서 각 파일은 자체 참조하여 시간을 추가할 수 있지만 폴더 트리의 모든 파일에 적용할 수 있습니다. 이를 수행할 수 있는 좋은 방법이 있습니까?

#!/bin/bash
FILES=$(find $HIGHEST_FOLDER -type f -name *.*)
for f in $FILES
do
  touch -ram f -F 7776000 f
  # bumping access and modification timestamps by 3 months?
done

아니면 find -exec제안대로 사용하는 것이 좋습니다이것답변? (이 폴더에는 많은 파일이 있습니다.) 그렇다면 어떻게 할까요?

답변1

Linux 시스템을 사용 중이거나 최소한 GNU touch및 GNU 가 있다고 가정하면 date다음을 수행할 수 있습니다(bash에서는 zsh동일하지만 필수는 아님 shopt globstar).

$ shopt globstar
$ for f in **; do 
    touch -d "$(date -d "$(stat -c '%y' "$f") +3 months")" "$f"
  done

그러나 숨겨진 파일은 무시됩니다. 이들도 일치시키려면 shopt -s dotglob위 명령보다 먼저 실행하십시오.

설명하다

  • shopt -s globstar: 이것은 globstarbash에 대한 옵션을 설정합니다. 즉, **모든 파일과 0개 이상의 디렉터리 및 하위 디렉터리가 일치됩니다.
  • shopt -s dotglob: *(및 **)이 이름이 로 시작하는 파일과도 일치하게 합니다 ..
  • for f in **; do ...; done: 모든 파일을 반복합니다.및 디렉토리, 다른 이름으로 저장하세요 $f.
  • stat -c '%y' "$f": 현재 파일이나 디렉터리의 현재 타임스탬프입니다.
  • date -d $(...) +3 months: 주어진 문자열로부터 3개월 후의 날짜를 인쇄합니다(이 경우 문자열은 stat에 대한 명령의 출력 입니다 $f).

요약하면 위의 명령은 현재 폴더(모든 하위 디렉터리 포함)에 있는 모든 파일이나 디렉터리의 수정 날짜를 찾아 해당 날짜를 지금부터 3개월로 설정합니다.

답변2

질문에 대한 설명으로 볼 때 마지막 파일 수정 시간을 확인하고 3개월을 추가할 수 있는 도구를 찾고 계신 것으로 보입니다. ++일부 쉘 산술 평가를 사용하여 이를 수행 할 수 있습니다 stat. touch예를 들어 file타임스탬프에 90일을 추가하려면 다음과 같이 작성할 수 있습니다.

touch -d "@$(( $(stat -c '%Y' file) + 90*24*3600 ))" file

file그런 다음 필요한 모든 것을 반복하십시오 .

답변3

나는 -execfind -a oneliner를 사용할 것입니다.

find $HIGHEST_FOLDER -type f -name '*.*' -exec touch -d "$(date -d "$(stat -c '%y' {}) +3 months")" {} \;

reference *.*, 그렇지 않으면 find현재 디렉터리에서 파일 이름을 가져오고 실패합니다.

마지막으로 이 작업을 강제하려면 \;백슬래시와 세미콜론을 지정해야 합니다 . 현재 발견 된 파일 -exec입니다 .{}find

GNU 터치로 전환 하지 않았 -F으므로 예제가 작동하지 않습니다. 또한 여러 구문 문제가 있습니다.

위의 for 루프에서 f를 $f로 변경해야 합니다.

touch [...] $f

그렇지 않으면 현재 디렉터리에서 이름이 지정된 파일을 찾아 f해당 날짜를 x번 변경합니다. 여기서 x는 입니다 $HIGHEST_FOLDER.

서브셸(루프 앞) 사용을 고집한다면 서브셸에서 설정했는지 $(...)확인해야 합니다 .$HIGHEST_FOLDER

관련 정보