月名のみを含むディレクトリの作成

月名のみを含むディレクトリの作成

気になって質問をしましたが、1月、2月…~12月のようなディレクトリを作りたくて個別に名前をつけて作りました。 (mkdir January February...etc.)すべての月名を含むディレクトリまたはファイル名を簡単に作成できますか?

例: touch {1..10}10 個のファイル 1,2,3...10 が簡単に生成されます。このような月名のファイルやディレクトリを生成する他のソリューションはありますか?

答え1

POSIXly、

(IFS=';'; set -f; mkdir -- $(locale mon))

これは現在の言語の月名です。LC_ALL=C locale monユーザーの言語に関係なく英語が必要な場合に置き換えます。

Passを使用すると、特別な連想配列(モジュール内)をzsh使用することもできます。$langinfozsh/langinfo

zmodload zsh/langinfo
eval mkdir -- '$langinfo[MON_'{1..12}']'

しかし、

mkdir -- ${(s:;:)"$(locale mon)"}

短くなります。rc/には、Bourneなどのシェルのグローバル設定をes介さずに区切り文字を指定する分割演算子を持つ他のシェルがあります。$IFS

mkdir -- ``';'{locale mon}

答え2

改訂するSchimmelの台本

for i in {1..12} ; do
   mkdir $(LC_TIME=C date +%B -d "${i}/15")
done

ループなし

LC_TIME=C date +%B -f <(printf "%d/15\n" {1..12}) | xargs mkdir

答え3

次の入力をdate許可するGNUのループコンストラクタを使用できます。+1 month+2 months

i=1; while ((i<=12)); do mkdir "$(date -d "+$i month" '+%B')"; ((i++)); done

例:

$ i=1; while ((i<=12)); do date -d "+$i month" '+%B'; ((i++)); done
September
October
November
December
January
February
March
April
May
June
July
August

答え4

ロケールを使用し、Linux(locale(1)他のシステムでは出力が異なる)と次のものを想定しますbash(1)

#! /bin/sh
(
    eval "$( locale -k -c LC_TIME | grep ^mon= )" || exit
    IFS=\; months=($mon)
    mkdir "${months[@]}"
)

関連情報