Avec -I
, xargs
obtient un argument par ligne par opposition à la valeur par défaut d'un argument par mot (vide ou délimité par une nouvelle ligne, éventuellement cité) sans -I
(et implique -n
). Ainsi, dans votre exemple, date
est appelé une seule fois avec {}
étendu à la sortie entière de echo
(qui se trouve sur une seule ligne), moins la nouvelle ligne de fin.
Ici, vous pouvez le faire (notez qu'il -d
s'agit d'une extension GNU):
printf '%s\n' {1..12}/01 | xargs -I {} date -d {} +%b | xargs mkdir --
(notez que cela ne fonctionnera pas correctement dans les environnements locaux où les abréviations de nom de mois contiennent des espaces ou des guillemets; avec GNU xargs
, vous pouvez contourner cela en utilisant xargs -d '\n' mkdir --
)
Maintenant, pour obtenir la liste des abréviations de mois dans vos paramètres régionaux, interroger directement les paramètres régionaux aurait plus de sens:
(IFS=';'; set -o noglob; mkdir -- $(locale abmon))
(voir aussi locale -k LC_TIME
pour voir toutes les données locales dans la LC_TIME
catégorie).
Ou nativement dans zsh
:
zmodload zsh/langinfo
mkdir -- ${(v)langinfo[(I)ABMON_*]}
Au moins sur les systèmes GNU, dans certaines régions, les abréviations des mois sont complétées à une largeur fixe avec des espaces:
$ 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月
Vous souhaiterez peut-être supprimer ce rembourrage.
Les espaces en tête seraient supprimés par xargs -I
, mais pas ceux en queue. Avec zsh
:
zmodload zsh/langinfo
set -o extendedglob
mkdir -- ${${${(v)langinfo[(I)ABMON*]}##[[:space:]]#}%%[[:space:]]#}