Con -I
, xargs
ottiene un argomento per riga anziché il valore predefinito di un argomento per parola (vuota o delimitata da una nuova riga, eventualmente citata) senza -I
(e implica -n
). Quindi nel tuo esempio date
viene chiamato solo una volta con {}
espanso all'intero output di echo
(che è su una riga), meno la nuova riga finale.
Qui puoi fare (nota che si -d
tratta di un'estensione GNU):
printf '%s\n' {1..12}/01 | xargs -I {} date -d {} +%b | xargs mkdir --
(nota che non funzionerà correttamente in locali in cui le abbreviazioni dei nomi dei mesi contengono spazi o virgolette; con GNU xargs
, puoi aggirare ciò usando xargs -d '\n' mkdir --
)
Ora, per ottenere l'elenco delle abbreviazioni dei mesi nelle impostazioni locali, eseguire una query direttamente sulle impostazioni locali avrebbe più senso:
(IFS=';'; set -o noglob; mkdir -- $(locale abmon))
(vedi anche locale -k LC_TIME
per vedere tutti i dati di localizzazione nella LC_TIME
categoria).
O nativamente in zsh
:
zmodload zsh/langinfo
mkdir -- ${(v)langinfo[(I)ABMON_*]}
Almeno sui sistemi GNU, in alcune versioni locali, le abbreviazioni dei mesi sono riempite a larghezza fissa con spazi:
$ 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月
Potresti voler rimuovere quell'imbottitura.
Gli spazi iniziali verrebbero rimossi xargs -I
, ma non quelli finali. Con zsh
:
zmodload zsh/langinfo
set -o extendedglob
mkdir -- ${${${(v)langinfo[(I)ABMON*]}##[[:space:]]#}%%[[:space:]]#}