仅使用月份名称创建目录

kar*_*hik 8 command-line date

好奇地发布问题,我想创建像一月、二月……到十二月这样的目录,所以我通过单独给出名称来创建它们。( mkdir January February....etc) 是否可以以简单的方式创建带有所有月份名称的目录或文件名?

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

Sté*_*las 18

POSIXly,

(IFS=';'; set -f; mkdir -- $(locale mon))
Run Code Online (Sandbox Code Playgroud)

请注意,它是当前语言中的月份名称。LC_ALL=C locale mon无论用户使用何种语言,如果您想要英文版本,请替换为。

使用zsh,您还可以使用$langinfo特殊的关联数组(在zsh/langinfo模块中):

zmodload zsh/langinfo
eval mkdir -- '$langinfo[MON_'{1..12}']'
Run Code Online (Sandbox Code Playgroud)

尽管

mkdir -- ${(s:;:)"$(locale mon)"}
Run Code Online (Sandbox Code Playgroud)

会更短。在rc/es中是其他带有拆分运算符的 shell,您可以在其中指定分隔符(除了通过$IFS类似 Bourne 的 shell中的全局设置):

mkdir -- ``';'{locale mon}
Run Code Online (Sandbox Code Playgroud)


Cos*_*tas 9

修改heemayl 的脚本

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

无循环

LC_TIME=C date +%B -f <(printf "%d/15\n" {1..12}) | xargs mkdir
Run Code Online (Sandbox Code Playgroud)


hee*_*ayl 8

您可以在 GNU 中使用循环结构,date它采用+1 month+2 months例如输入:

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

例子:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 从一月开始,在开始时将 i 设置为 5。 (3认同)
  • @123 22 天再说一遍;) (2认同)