주 번호가 변경되면 어떻게 즉시 스크립트를 실행할 수 있나요?

주 번호가 변경되면 어떻게 즉시 스크립트를 실행할 수 있나요?

다운로드 폴더를 정렬하고 싶습니다. 내 목표는 이번 주의 파일을 다운로드 폴더에 넣고, 이전 파일을 해당 파일이 생성된 주 번호와 연도를 딴 폴더에 넣는 것입니다(예: 2013.09, 사전순으로 정렬).

다운로드 폴더의 루트에 있는 파일과 폴더에 대해서만 이것이 작동했으면 좋겠습니다. tar브라우저는 때때로 다운로드가 완료된 후 아카이브와 기타 항목을 자동으로 확장합니다.

현재 다운로드 폴더 루트에 위치한 파일 및 폴더는 이번 주의 파일 및 폴더로 간주됩니다. 그러나 mtime 및 ctime은 파일이 실제로 다운로드가 완료되는 시점을 알려주지 않습니다.

머신이 항상 켜져 있었다면 주 번호가 변경되자마자 실행되도록 cron 작업을 설정할 수 있었지만 이것은 노트북이고 사용하지 않을 때는 대기 모드로 설정했습니다.

답변1

crontab을 다음으로 설정합니다:

@reboot the-script
0 0 * * 1 the-script
0 0 1 1 * the-script

월요일과 부팅할 때마다 완료하세요. 에서 the-script완료되었는지 확인하세요. (ISO 8061 주 번호(%V)를 사용하는 경우가 아니라 주 번호를 사용하는 경우(Gilles에게 감사) %W1월 1일에도 이 작업을 수행해야 합니다 .

cron지원하지 않는 경우 @reboot시작 스크립트에 추가해야 합니다.

아니면 매일 실행하고 그런 일을 하세요. ( GNU findOS/X는 아니라고 가정하고, OS/X stat-exec ... {} +.

 cd ~/Download || exit
 find . -path './20[0-9][0-9].[0-9]*' -prune -o -type f -mtime +7 -printf '%p\0%TY.%TW\0' |
   xargs -r0n2 sh -c 'mkdir -p "$2" && exec mv -i "$@"' sh

(테스트되지 않음)

또는 다음을 사용하여 zsh:

zmodload zsh/stat
cd ~/Download || exit
for f (**/*~20[0-9][0-9].[0-9]*(.DNm+7)) {
  zstat -A d -F %Y.%W -- $f &&
    mkdir -p $d &&
    mv -i -- $f $d
}

이 작업을 재귀적으로 수행하지 않으려면 다음이 더 쉽습니다.

zmodload zsh/stat
cd ~/Download || exit
for f (*(.DNm+7)) {
  zstat -A d -F %Y.%W -- $f &&
    mkdir -p $d &&
    mv -i -- $f $d
}

마지막 수정 시간이 다운로드 시간을 반영하지 않는 경우 출생 시간을 사용할 수 있습니다. 이번에는 OS/X를 사용 하고 find( stat그리고xargs-maxdepth 1아니요재귀):

find . -type f -maxdepth 1 -Btime +7 \
  -exec stat -nf%SB -t%Y.%W {} \; \
  -exec printf '\0' \; \
  -print0  | xargs -0n2 sh -c '
  mkdir -p "$1" && mv -i "$2" "$1"' sh

관련 정보