(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