Com -I
, xargs
obtém um argumento por linha em oposição ao padrão de um argumento por palavra (em branco ou em nova linha, possivelmente entre aspas) palavra sem -I
(e implica -n
). Portanto, no seu exemplo, date
é chamado apenas uma vez com {}
expandido para toda a saída de echo
(que está em uma linha), menos a nova linha à direita.
Aqui você pode fazer (observe que essa -d
é uma extensão GNU):
printf '%s\n' {1..12}/01 | xargs -I {} date -d {} +%b | xargs mkdir --
(observe que ele não funcionará corretamente em locais onde as abreviações do nome do mês contenham espaços ou caracteres de aspas; com o GNU xargs
, você pode contornar isso usando xargs -d '\n' mkdir --
)
Agora, para obter a lista de abreviações do mês em seu código do idioma, consultar o código do idioma diretamente faria mais sentido:
(IFS=';'; set -o noglob; mkdir -- $(locale abmon))
(veja também locale -k LC_TIME
para ver todos os dados de localidade na LC_TIME
categoria).
Ou nativamente em zsh
:
zmodload zsh/langinfo
mkdir -- ${(v)langinfo[(I)ABMON_*]}
Pelo menos nos sistemas GNU, em alguns locais, as abreviações do mês são preenchidas com largura fixa com espaços:
$ LC_ALL=et_EE.UTF-8 locale title abmon
Estonian locale for Estonia
jaan ;veebr;märts;apr ;mai ;juuni;juuli;aug ;sept ;okt ;nov ;dets
$ LC_ALL=zh_TW.UTF-8 locale title abmon
Chinese locale for Taiwan R.O.C.
1月; 2月; 3月; 4月; 5月; 6月; 7月; 8月; 9月;10月;11月;12月
Você pode remover esse preenchimento.
Os espaços à frente seriam removidos por xargs -I
, mas não os à direita. Com zsh
:
zmodload zsh/langinfo
set -o extendedglob
mkdir -- ${${${(v)langinfo[(I)ABMON*]}##[[:space:]]#}%%[[:space:]]#}