GNU/Linux >> Znalost Linux >  >> Linux

"pro File In" číselně namísto abecedně?

Tato otázka zde již obsahuje odpovědi :Iterace přes složky v číselném pořadí

(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

Linux
  1. Jak obnovit otevřený, ale smazaný soubor v Linuxu pomocí ln místo cp?

  2. Cron běží pouze jednou za minutu

  3. cp-L vs. cp-H

  1. Linux – všechno je soubor?

  2. Náhodně bylo použito přesměrování výstupu > místo roury |

  3. Jak v linuxu vidím du v GB místo MB?

  1. Třídit část souboru?

  2. Počítat řádky v souboru?

  3. C fopen vs open