다운로드 폴더를 정렬하고 싶습니다. 내 목표는 이번 주의 파일을 다운로드 폴더에 넣고, 이전 파일을 해당 파일이 생성된 주 번호와 연도를 딴 폴더에 넣는 것입니다(예: 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에게 감사) %W
1월 1일에도 이 작업을 수행해야 합니다 .
cron
지원하지 않는 경우 @reboot
시작 스크립트에 추가해야 합니다.
아니면 매일 실행하고 그런 일을 하세요. ( GNU
find
OS/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