Mit -I
, xargs
wird ein Argument pro Zeile auf die Standardeinstellung von einem Argumente im Gegensatz pro (leer oder Newline begrenzt, möglicherweise zitiert) Wort ohne -I
(und impliziert -n
). In Ihrem Beispiel date
wird also nur einmal aufgerufen {}
, wobei die gesamte Ausgabe von echo
(die sich in einer Zeile befindet) abzüglich der nachfolgenden neuen Zeile erweitert wird.
Hier können Sie Folgendes tun (beachten Sie, dass dies -d
eine GNU-Erweiterung ist):
printf '%s\n' {1..12}/01 | xargs -I {} date -d {} +%b | xargs mkdir --
(Beachten Sie, dass dies in Gebietsschemas, in denen Abkürzungen für Monatsnamen Leerzeichen oder Anführungszeichen enthalten, nicht ordnungsgemäß funktioniert. Mit GNU xargs
können Sie dies mithilfe von umgehen. xargs -d '\n' mkdir --
)
Um die Liste der Monatsabkürzungen in Ihrem Gebietsschema zu erhalten, ist es sinnvoller, das Gebietsschema direkt abzufragen:
(IFS=';'; set -o noglob; mkdir -- $(locale abmon))
(Siehe auch locale -k LC_TIME
, um alle Gebietsschemadaten in der LC_TIME
Kategorie anzuzeigen ).
Oder nativ in zsh
:
zmodload zsh/langinfo
mkdir -- ${(v)langinfo[(I)ABMON_*]}
Zumindest auf GNU-Systemen werden in einigen Regionen die Monatsabkürzungen mit Leerzeichen auf eine feste Breite aufgefüllt:
$ 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月
Möglicherweise möchten Sie diese Polsterung entfernen.
Die führenden Leerzeichen würden von entfernt xargs -I
, aber nicht die nachfolgenden. Mit zsh
:
zmodload zsh/langinfo
set -o extendedglob
mkdir -- ${${${(v)langinfo[(I)ABMON*]}##[[:space:]]#}%%[[:space:]]#}