好奇心で質問を投稿して、1月、2月…12月のようなディレクトリを作りたかったので、個別に名前を付けて作成しました。 (mkdir January February
.... etc)すべての月の名前を持つディレクトリまたはファイル名を簡単な方法で作成することは可能ですか?
例えば : touch {1..10}
は、10個のファイル1、2、3 ... 10を簡単に作成します。これは、月の名前でファイルまたはディレクトリを作成する他の解決策があるのですか?
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
は、区切り記号を指定できる他のシェルであり、セパレーターを指定できます(Bourneのようなシェルのようなグローバル$IFS
設定以外):
mkdir -- ``';'{locale mon}
heemayl's script の変更
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]'
_
ロケールの使用とLinuxの想定(locale(1)
の出力は他のシステムでは異なります)およびbash(1)
:
#! /bin/sh
(
eval "$( locale -k -c LC_TIME | grep ^mon= )" || exit
IFS=\; months=($mon)
mkdir "${months[@]}"
)