crear el directorio solo con el nombre del mes

8

Al hacer una pregunta por curiosidad, quería crear un directorio como enero, febrero ... a diciembre, así que los creé dando el nombre individualmente. ( mkdir January February.... etc.) ¿Es posible crear directorios o nombres de archivos con el nombre de todos los meses de manera fácil?

por ejemplo: touch {1..10}creará 10 archivos 1,2,3 ... 10 fácilmente, como esta ¿hay alguna otra solución para crear los archivos o el directorio con el nombre del mes?

karthik
fuente

Respuestas:

18

POSIXY

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

Tenga en cuenta que son los nombres de los meses en el idioma actual. Reemplace con LC_ALL=C locale monsi quiere los ingleses sin importar el idioma del usuario.

Con zsh, también puede usar la $langinfomatriz asociativa especial (en el zsh/langinfomódulo):

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

Aunque

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

Sería más corto. En rc/ esque hay otros shells con operadores de división donde puede especificar los separadores (que no sean a través de esa $IFSconfiguración global como en shells tipo Bourne):

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

Modificación del guión de heemayl

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

Sin bucle

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

Puede usar una construcción en bucle con GNU dateque toma +1 month, +2 monthscomo entradas:

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

Ejemplo:

$ 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
fuente
3
Establezca i en 5 al comienzo para comenzar desde enero.
123
2
@ 123 Dilo de nuevo 22 días;)
heemayl
4

Python conoce todos los nombres de los meses:

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

O bien, podemos usar python directamente para crear el directorio:

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

El corazón de lo anterior es el [os.mkdir(m) for m in calendar.month_name if m]que hace un directorio para cada mes calendar.month_name. Esto generará un mensaje de error y se cerrará si alguno de los directorios ya existe. Si queremos evitar eso, podemos probar la existencia de directorios antes de llamar mkdir:

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

Ejemplo:

$ 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

Internacionalizacion

Stéphane Chazelas señala que lo anterior imprime los nombres de los meses en inglés. Para obtener los nombres de los meses locales, sugiere:

python -c 'import calendar,locale,os;locale.setlocale(locale.LC_ALL, "");[os.mkdir(m) for m in calendar.month_name if m]'
John1024
fuente
@ StéphaneChazelas Gracias. Actualicé la respuesta. (Tu locale mones superior y ya tiene mi +1.)
John1024
2

Usar configuraciones regionales y asumir Linux (la salida de locale(1)es diferente en otros sistemas) y bash(1):

#! /bin/sh
(
    eval "$( locale -k -c LC_TIME | grep ^mon= )" || exit
    IFS=\; months=($mon)
    mkdir "${months[@]}"
)
Satō Katsura
fuente
months=($mon)no es shsintaxis Eso es ksh93o bashsintaxis.
Stéphane Chazelas