(6 odpovědí)
Uzavřeno před 3 lety.
Mám skript generující index na základě každého souboru ve složce. Všechny názvy souborů jsou čísla s příponou.
Jak mohu upravit svou smyčku tak, aby je zpracovávala v číselném pořadí?
for file in xml/*.xml; do
...
done
Přijatá odpověď:
Pokud máte GNU sort
který má možnost omezit na \0
oddělovač, který můžete udělat. Tímto způsobem while
smyčka začne získávat soubory v seřazeném pořadí, abyste je mohli zpracovat. Nahraďte printf
možnost s vaší vlastní logikou.
shopt -s nullglob
printf '%s\0' xml/*.xml | sort -zV | while read -rd '' file; do
printf "%s\n" "$file"
done
shopt -u nullglob
nullglob
možnost je zabránit shellu v rozbalení prázdné globu, pokud není xml
soubory jsou nalezeny v aktuální složce. Možnost -u
po dokončení zpracování jej zruší.
Jak Tony Speight správně zdůrazňuje, pokud si nechcete zahrávat s možnostmi shellu (např. může být povolen z jiných důvodů), můžete jednoduše nastavit sub-shell a nechat proběhnout globální expanzi
( shopt -s nullglob; printf '%s\0' xml/*.xml ) | sort -zV | while read -rd '' file; do
printf "%s\n" "$file"
done