好奇地发布问题,我想创建像一月、二月……到十二月这样的目录,所以我通过单独给出名称来创建它们。( 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)
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)
您可以在 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)