月名のみのディレクトリを作成する


8

好奇心で質問を投稿して、1月、2月…12月のようなディレクトリを作りたかったので、個別に名前を付けて作成しました。(mkdir January February.... etc)すべての月の名前を持つディレクトリまたはファイル名を簡単な方法で作成することは可能ですか?

たとえば、touch {1..10}10個のファイル1、2、3 ... 10を簡単に作成します。これは、月の名前でファイルまたはディレクトリを作成する他の解決策があるかどうかです。

回答:


18

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あなたが(そのグローバル経由以外の区切り文字を指定することができます分割事業者と他のシェルである$IFSBourneシェルのようなシェルのように設定):

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


8

入力と同じように、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

3
janから開始するには、最初にiを5に設定します。
123

2
@ 123もう一度言って22日;)
heemayl

4

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]'

@StéphaneChazelasありがとう。答えを更新しました。(あなたlocale monは優れており、すでに私の+1を持っています。)
John1024

2

ロケールの使用とLinuxの想定(locale(1)他のシステムではの出力は異なります)およびbash(1)

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

months=($mon)sh構文ではありません。ことksh93bash構文。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.