仅使用月份名称创建目录


8

出于好奇而发布问题,我想创建1月,2月...到12月这样的目录,因此我通过分别给出名称来创建它们。(mkdir January February.... etc)是否可以轻松地用所有月份的名称创建目录或文件名?

例如:touch {1..10}将轻松创建10个文件1,2,3 ... 10,像这样是否有其他解决方案来创建带有月份名称的文件或目录?

Answers:


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,还有其他带有拆分运算符的shell,您可以在其中指定分隔符(而不是$IFS像在Bourne这样的shell中那样通过全局设置):

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

9

修改heemayl脚本

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

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。
2016年

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

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.