Voglio concatenare un gruppo di file insieme in ordine di nome file.
È sicuro supporre che questo mi dia in ordine alfanumerico?
cat *
cioè lo stesso ordine che ls
dà.
Voglio concatenare un gruppo di file insieme in ordine di nome file.
È sicuro supporre che questo mi dia in ordine alfanumerico?
cat *
cioè lo stesso ordine che ls
dà.
Risposte:
Risposta breve: Sì lo farà.
Dalla pagina man di bash :
Dopo la suddivisione delle parole, a meno che non sia stata impostata l'opzione -f (vedi The Set Builtin), Bash analizza ogni parola per i caratteri '*', '?' E '['. Se viene visualizzato uno di questi caratteri, la parola viene considerata come un motivo e sostituita con un elenco in ordine alfabetico di nomi di file corrispondenti al motivo.
ls
dello stesso sistema.
La risposta breve è sì, ma devi essere consapevole di ciò che pensa dovrebbe essere l'ordine alfanumerico, poiché potrebbe non corrispondere all'ordine naturale che hai in mente.
Ad esempio, esegui alcuni test su come vengono gestite le lettere maiuscole e minuscole per scoprirlo sul tuo sistema, così come le sequenze di numeri.
Un problema comune che ho riscontrato nell'ordinare elenchi di file restituiti da un glob sono i file numerati. Mi vengono spesso dati file numerati come:
blah_1.txt
blah_2.txt
...
blah_10.txt
blah_11.txt
Tuttavia, un glob che usa il *
non li restituirà in questo ordine, invece otterrai qualcosa del tipo:
blah_1.txt
blah_10.txt
blah_11.txt
...
blah_2.txt
blah_20.txt
...
Quindi - per evitare questo problema si sia bisogno di fare un po 'di manipolazione sulla lista restituita di file, o rinominare i files in modo che una sola cifra hai zero (vale a dire blah_01.txt
, blah_02.txt
e così via).
$LC_COLLATE
).