出于好奇发布问题,我想创建像一月、二月...到十二月这样的目录,所以我通过单独给出名称来创建它们。 (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[@]}"
)