回答:
POSIXly、
(IFS=';'; set -f; mkdir -- $(locale mon))
現在の言語での月の名前です。LC_ALL=C locale mon
ユーザーの言語に関係なく英語を使用する場合は、に置き換えます。
ではzsh
、$langinfo
特別な連想配列(zsh/langinfo
モジュール内)を使用することもできます。
zmodload zsh/langinfo
eval mkdir -- '$langinfo[MON_'{1..12}']'
でも
mkdir -- ${(s:;:)"$(locale mon)"}
短くなります。でrc
/ es
あなたが(そのグローバル経由以外の区切り文字を指定することができます分割事業者と他のシェルである$IFS
Bourneシェルのようなシェルのように設定):
mkdir -- ``';'{locale mon}
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
入力と同じように、GNU date
でループ構造を使用できます。+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
Pythonは月の名前をすべて知っています。
mkdir $(python -c 'import calendar; print(" ".join(calendar.month_name))')
または、直接pythonを使用してディレクトリを作成することもできます。
python -c 'import calendar,locale,os;locale.setlocale(locale.LC_ALL, "");[os.mkdir(m) for m in calendar.month_name if m]'
上記の中心は、の[os.mkdir(m) for m in calendar.month_name if m]
毎月のディレクトリを作成することcalendar.month_name
です。これにより、エラーメッセージが生成され、ディレクトリがすでに存在する場合は終了します。それを避けたい場合は、呼び出す前にディレクトリの存在をテストできますmkdir
。
python -c 'import calendar,os;[os.mkdir(m) for m in calendar.month_name if m and not os.path.exists(m)]'
$ python -c 'import calendar,os;[os.mkdir(m) for m in calendar.month_name if m]'
$ ls
April December January June May October
August February July March November September
StéphaneChazelasは、上記は英語の月名を出力していると指摘しています。ローカルの月名を取得するには、次のように提案します。
python -c 'import calendar,locale,os;locale.setlocale(locale.LC_ALL, "");[os.mkdir(m) for m in calendar.month_name if m]'
locale mon
は優れており、すでに私の+1を持っています。)
ロケールの使用とLinuxの想定(locale(1)
他のシステムではの出力は異なります)およびbash(1)
:
#! /bin/sh
(
eval "$( locale -k -c LC_TIME | grep ^mon= )" || exit
IFS=\; months=($mon)
mkdir "${months[@]}"
)
months=($mon)
sh
構文ではありません。ことksh93
やbash
構文。