GNU/Linux >> LINUX-Kenntnisse >  >> Linux

„for File In“ numerisch statt alphabetisch??

Für diese Frage gibt es hier bereits Antworten :Ordner in numerischer Reihenfolge durchlaufen

(6 Antworten)
Vor 3 Jahren geschlossen.

Ich habe ein Skript, das einen Index basierend auf jeder Datei in einem Ordner generiert. Alle Dateinamen sind eine Zahl mit Erweiterung.

Wie kann ich meine Schleife ändern, um sie in numerischer Reihenfolge zu verarbeiten?

for file in xml/*.xml; do
  ...
done

Akzeptierte Antwort:

Wenn Sie GNU sort haben das hat die Möglichkeit, den \0 zu begrenzen Trennzeichen, das Sie tun können. Auf diese Weise das while Schleife beginnt, Dateien in der sortierten Reihenfolge abzurufen, damit Sie sie verarbeiten können. Ersetzen Sie printf Option mit Ihrer eigenen benutzerdefinierten Logik.

shopt -s nullglob

printf '%s\0' xml/*.xml | sort -zV | while read -rd '' file; do
    printf "%s\n" "$file"
done

shopt -u nullglob

Der nullglob Die Option soll verhindern, dass die Shell einen leeren Glob erweitert, wenn kein xml vorhanden ist Dateien befinden sich im aktuellen Ordner. Die Option -u setzt es zurück, nachdem Ihre Verarbeitung abgeschlossen ist.

Wie Tony Speight zu Recht betont, können Sie, wenn Sie nicht mit den Shell-Optionen herumspielen wollen (z. B. wenn sie aus anderen Gründen aktiviert sind), einfach die Sub-Shell einrichten und die Glob-Erweiterung durchführen lassen

( shopt -s nullglob; printf '%s\0' xml/*.xml ) | sort -zV |  while read -rd '' file; do
    printf "%s\n" "$file"
done

Linux
  1. Teil einer Datei sortieren?

  2. Zeilen in einer Datei zählen?

  3. C fopen gegen offen

  4. In .txt-Datei schreiben?

  5. Wie kann man geöffnete, aber gelöschte Dateien unter Linux mit ln anstelle von cp wiederherstellen?

Warum ich unter Linux exa anstelle von ls verwende

Bash-printf-Befehl

VIM-Editor

Curl Herunterladen von HTML anstelle der eigentlichen Zip-Datei? Hier ist, was zu tun ist

Was ist eine .sh-Datei?

Wie sehe ich du in GB anstelle von MB in Linux?