目录命名为 days 的一个班轮 mkdir ?

目录命名为 days 的一个班轮 mkdir ?

如何仅用一个命令在 /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_1DAY_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=';'

相关内容