如何仅用一个命令在 /tmp/ 等目录中创建以一周中的几天(即星期一、星期二、...星期六)命名的目录?
mkdir
就像withdate +%A
或任何其他的组合。
mkdir -p /tmp/"$(date +%A)" ---> /tmp/Tuesday
命令执行后应如下所示。
/tmp/Monday
/tmp/Tuesday
.
.
.
/tmp/Saturday
我希望在单个命令中执行此操作,而不是脚本。
答案1
您可以使用以下“命令”来获得所需的结果:
for i in {1..7}; do mkdir /tmp/$(date +"%A" --date "$i days ago"); done
答案2
您可以使用大括号扩展:
mkdir -p /tmp/{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}
上面的内容与此等效(这也是单个命令):
mkdir -p /tmp/Sunday /tmp/Monday /tmp/Tuesday /tmp/Wednesday /tmp/Thursday /tmp/Friday /tmp/Saturday
答案3
和zsh
:
zmodload zsh/langinfo # if not already loaded
mkdir /tmp/${(v)^langinfo[(I)DAY_*]}
它使用您所在区域中的日期名称。作为单个命令:
zsh -c 'zmodload zsh/langinfo && mkdir /tmp/${(v)^langinfo[(I)DAY_*]}'
$langinfo
是一个特殊的关联数组,它公开一些区域设置,包括日期名称。$langinfo[(I)DAY_*]
将输出匹配的数组的键DAY_*
(即DAY_1
,DAY_2
...)。使用(v)
参数扩展标志,我们可以扩展这些键的值。^
分配这些元素,使其成为/tmp/value1
,/tmp/value2
...
使用任何类似 POSIX 的 shell,您还可以执行以下操作:
(cd /tmp && IFS=';' && set -o noglob && mkdir $(locale day))
locale day
返回;
当前语言环境中以 - 分隔的日期名称列表。$(...)
禁用后,我们对其使用 split+glob 运算符(将命令替换保留为不带引号的)全局部分 ( set -o noglob
) 并调整分裂;
要在( )上拆分的部分IFS=';'
。