気になって質問をしましたが、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
使用することもできます。$langinfo
zsh/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[@]}"
)