Você pode usar o seguinte 'comando' para obter o resultado desejado:
for i in {1..7}; do mkdir /tmp/$(date +"%A" --date "$i days ago"); done
Como posso criar diretórios nomeados como dias da semana (ou seja, segunda-feira, terça-feira, .... sábado) dentro de um diretório como / tmp / em apenas um comando?
Como a combinação de mkdir
com date +%A
ou qualquer outra.
mkdir -p /tmp/"$(date +%A)" ---> /tmp/Tuesday
Deve ser como abaixo após o comando ser executado.
/tmp/Monday
/tmp/Tuesday
.
.
.
/tmp/Saturday
Eu quero isso em um único comando, não em um script.
Você pode usar a expansão de chaves:
mkdir -p /tmp/{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}
O acima é equivalente a isso (que também é um único comando):
mkdir -p /tmp/Sunday /tmp/Monday /tmp/Tuesday /tmp/Wednesday /tmp/Thursday /tmp/Friday /tmp/Saturday
com zsh
:
zmodload zsh/langinfo # if not already loaded
mkdir /tmp/${(v)^langinfo[(I)DAY_*]}
Que usa nomes de dia em sua localidade. Como um único comando:
zsh -c 'zmodload zsh/langinfo && mkdir /tmp/${(v)^langinfo[(I)DAY_*]}'
$langinfo
é uma matriz associativa especial que expõe algumas configurações de localidade, incluindo nomes de dias. $langinfo[(I)DAY_*]
produziria as chaves dessa matriz que correspondem a DAY_*
(ou seja, DAY_1
, DAY_2
...). Com o sinalizador de expansão do parâmetro (v)
, expandimos os valores para essas chaves. ^
distribui esses elementos para que se torne /tmp/value1
, /tmp/value2
...
Com qualquer shell do tipo POSIX, você também pode fazer:
(cd /tmp && IFS=';' && set -o noglob && mkdir $(locale day))
locale day
retorna uma lista separada por ;
de nomes de dias na localidade atual. Usamos o operador split + glob nele (deixe a substituição do comando $(...)
sem aspas) depois de ter desativado a parte glob ( set -o noglob
) e sintonizado a parte split para dividido em ;
( IFS=';'
).