週番号が変更されたら、すぐにスクリプトを実行できますか?

週番号が変更されたら、すぐにスクリプトを実行できますか?

ダウンロードフォルダを並べ替えたいです。私の目標は、今週のファイルをダウンロードフォルダに配置し、古いファイルをそのファイルが作成された週番号と年のフォルダに配置することです(例: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 / Xstat-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を使用してfindstatそして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

おすすめ記事