创建仅包含月份名称的目录

创建仅包含月份名称的目录

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

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

答案1

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}

答案2

修改希梅尔的脚本

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

答案3

您可以使用 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

答案4

使用语言环境并假设 Linux(其他系统上的输出locale(1)不同)并且bash(1)

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

相关内容