Skip to content

Instantly share code, notes, and snippets.

@butackle
Created January 26, 2025 06:37
Show Gist options
  • Save butackle/bbfa5bc3256d21ae5ec35ba396a7c65d to your computer and use it in GitHub Desktop.
Save butackle/bbfa5bc3256d21ae5ec35ba396a7c65d to your computer and use it in GitHub Desktop.
今年度分のフォルダを作るシェル芸に挑戦

環境

Mac

前説

新年になると、書類整理のために毎年同じ構造のフォルダを作成している

.
├── 2022
│   ├── dir-a
│   ├── dir-b
│   └── dir-c
├── 2023
│   ├── dir-a
│   ├── dir-b
│   └── dir-c
└── 2024
    ├── dir-a
    ├── dir-b
    └── dir-c

とはいえ、これ毎年手作業でやるのもなと思い立った。
いつもは横着してJSで書きがちなんだけど、まぁこのくらいなら勉強も兼ねてシェル芸で挑戦することに。

シェル芸を作る

処理の流れとしては 「前年度のフォルダ構成を参照 → 参照したフォルダ構成から新規作成するフォルダを作成」 というものを想定した。
毎年同じ構造のフォルダを作成 とか書いたのだが、たまにフォルダを変えてみたりして改善を試みていたりするので、 そのたびにシェル芸を書き直すのもな(シェルスクリプトにメモした)と思ったので、シェル芸に直接にフォルダ名を書きたくないなと思った。

なので、今年の場合だと 「2024年度のフォルダ構成を参照 → 参照したフォルダ構成から2025年度のフォルダを作成」 ということになる。

.
├── 2022
│   ├── dir-a
│   ├── dir-b
│   └── dir-c
├── 2023
│   ├── dir-a
│   ├── dir-b
│   └── dir-c
├── 2024
│   ├── dir-a
│   ├── dir-b
│   └── dir-c
└── 2025       <---- New!!
    ├── dir-a  <---- New!!
    ├── dir-b  <---- New!!
    └── dir-c  <---- New!!
    

結果

このようなシェル芸になった。

ls -d1 ./$(date -v-1y -j "+%Y")/*  | gawk  -F'/' 'BEGIN{print strftime("./%Y/",systime())} {print strftime("./%Y/",systime())$3}' | xargs mkdir

もっと良いシェル芸とかもあるんだろうけど、これで動いたので、ひとまずコレでヨシ!🐈‍⬛とした。

まぁこのくらいなら とか書いておいて、何だかんだ使い慣れてないところもあって、それなりにモタモタした。
コマンドのことをネットで調べると、dateとかawkってMacと他OSで挙動が違ったりすることがあって、それでつまづいたりした。

@yabeenico
Copy link

通りすがりの投下

rsync -avn --include '*/' --exclude '*' 2024/ 2025/
$ date -d -1years +%Y/
2024/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment