Defina o crontab como:
@reboot the-script
0 0 * * 1 the-script
0 0 1 1 * the-script
Para que seja feito às segundas e a cada inicialização. E em the-script
, verifique se já foi feito. (se estiver usando o %W
para o número da semana, você também precisa fazê-lo no dia 1º de janeiro (obrigado Gilles), não se estiver usando o número da semana ISO 8061 (% V)).
Se o seu cron
não for compatível com @reboot
, você deverá adicioná-lo a um script de inicialização.
Ou apenas execute-o diariamente e faça algo como (assumindo GNU
find
, portanto não OS / X, embora você possa usar OS / X stat
em combinação com -exec ... {} +
.
cd ~/Download || exit
find . -path './20[0-9][0-9].[0-9]*' -prune -o -type f -mtime +7 -printf '%pzmodload 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
}
%TY.%TWzmodload zsh/stat
cd ~/Download || exit
for f (*(.DNm+7)) {
zstat -A d -F %Y.%W -- $f &&
mkdir -p $d &&
mv -i -- $f $d
}
' |
xargs -r0n2 sh -c 'mkdir -p "$2" && exec mv -i "$@"' sh
(não testado)
Ou com zsh
:
find . -type f -maxdepth 1 -Btime +7 \
-exec stat -nf%SB -t%Y.%W {} \; \
-exec printf '@reboot the-script
0 0 * * 1 the-script
0 0 1 1 * the-script
' \; \
-print0 | xargs -0n2 sh -c '
mkdir -p "$1" && mv -i "$2" "$1"' sh
Se você não quiser recursivamente, é mais simples:
cd ~/Download || exit
find . -path './20[0-9][0-9].[0-9]*' -prune -o -type f -mtime +7 -printf '%pzmodload 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
}
%TY.%TWzmodload zsh/stat
cd ~/Download || exit
for f (*(.DNm+7)) {
zstat -A d -F %Y.%W -- $f &&
mkdir -p $d &&
mv -i -- $f $d
}
' |
xargs -r0n2 sh -c 'mkdir -p "$2" && exec mv -i "$@"' sh
Se a hora da última modificação não refletir o horário do download, você poderá usar o horário de nascimento. Desta vez usando OS / X find
, stat
e xargs
(e usando -maxdepth 1
para não recurse):
find . -type f -maxdepth 1 -Btime +7 \
-exec stat -nf%SB -t%Y.%W {} \; \
-exec printf '%pre%' \; \
-print0 | xargs -0n2 sh -c '
mkdir -p "$1" && mv -i "$2" "$1"' sh