membuat direktori dengan nama bulan saja

8

Memposting pertanyaan dengan rasa ingin tahu, saya ingin membuat direktori seperti Januari, Februari ... hingga Desember, jadi saya membuatnya dengan memberi nama secara individual. ( mkdir January February.... dll) Apakah mungkin membuat direktori atau nama file dengan nama semua bulan dengan mudah?

misalnya: touch {1..10}akan membuat 10 file 1,2,3 ... 10 dengan mudah, seperti ini apakah ada solusi lain untuk membuat file atau direktori dengan nama bulan?

karthik
sumber

Jawaban:

18

POSIXly,

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

Perhatikan, itu adalah nama bulan dalam bahasa saat ini. Ganti dengan LC_ALL=C locale monjika Anda ingin yang bahasa Inggris terlepas dari bahasa pengguna.

Dengan zsh, Anda juga dapat menggunakan $langinfoarray asosiatif khusus (dalam zsh/langinfomodul):

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

Meskipun

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

akan lebih pendek. Di rc/ esyang merupakan shell lain dengan operator pemisahan di mana Anda dapat menentukan pemisah (selain melalui $IFSpengaturan global seperti di shell Bourne-like):

mkdir -- ``';'{locale mon}
Stéphane Chazelas
sumber
9

Modifikasi skrip heemayl

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

Tanpa loop

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

Anda dapat menggunakan konstruksi perulangan dengan GNU dateyang membutuhkan +1 month, +2 monthsseperti input:

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

Contoh:

$ 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
heemayl
sumber
3
Atur i ke 5 di awal untuk mulai dari jan.
123
2
@ 123 Katakan lagi 22 hari;)
heemayl
4

Python tahu semua nama bulan:

mkdir $(python -c 'import calendar; print(" ".join(calendar.month_name))')

Atau, kita dapat menggunakan python secara langsung untuk membuat direktori:

python -c 'import calendar,locale,os;locale.setlocale(locale.LC_ALL, "");[os.mkdir(m) for m in calendar.month_name if m]'

Jantung di atas adalah [os.mkdir(m) for m in calendar.month_name if m]yang membuat direktori untuk setiap bulan di calendar.month_name. Ini akan menghasilkan pesan kesalahan dan berhenti jika salah satu direktori sudah ada. Jika kita ingin menghindari itu, kita dapat menguji keberadaan direktori sebelum memanggil mkdir:

python -c 'import calendar,os;[os.mkdir(m) for m in calendar.month_name if m and not os.path.exists(m)]'

Contoh:

$ 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

Penginternasionalan

Stéphane Chazelas menunjukkan bahwa di atas mencetak nama bulan Inggris. Untuk mendapatkan nama bulan lokal, ia menyarankan:

python -c 'import calendar,locale,os;locale.setlocale(locale.LC_ALL, "");[os.mkdir(m) for m in calendar.month_name if m]'
John1024
sumber
@ StéphaneChazelas Terima kasih. Saya memperbarui jawabannya. (Anda locale monlebih unggul dan sudah memiliki +1 saya.)
John1024
2

Menggunakan locales dan mengasumsikan Linux (output dari locale(1)berbeda pada sistem lain) dan bash(1):

#! /bin/sh
(
    eval "$( locale -k -c LC_TIME | grep ^mon= )" || exit
    IFS=\; months=($mon)
    mkdir "${months[@]}"
)
Satō Katsura
sumber
months=($mon)bukan shsintaks. Itu ksh93atau bashsintaksisnya.
Stéphane Chazelas