GNU/Linux >> Linux Esercitazione >  >> Linux

"per File In" in modo numerico anziché in ordine alfabetico??

Questa domanda ha già risposte qui :Iterazione tra cartelle in ordine numerico

(6 risposte)
Chiuso 3 anni fa.

Ho uno script che genera un indice basato su ogni file in una cartella. Tutti i nomi di file sono un numero con estensione.

Come posso modificare il mio ciclo per elaborarli in ordine numerico?

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

Risposta accettata:

Se hai GNU sort che ha la possibilità di delimitare su \0 delimitatore che puoi fare. In questo modo il while loop inizierà a ricevere i file nell'ordine ordinato per l'elaborazione. Sostituisci il printf opzione con la tua logica personalizzata.

shopt -s nullglob

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

shopt -u nullglob

Il nullglob l'opzione è impedire alla shell di espandere un glob vuoto se non è presente xml i file si trovano nella cartella corrente. L'opzione -u lo annulla al termine dell'elaborazione.

Come sottolinea giustamente Tony Speight, se non vuoi pasticciare con le opzioni della shell (ad esempio potrebbe essere abilitata per altri motivi) puoi semplicemente impostare nella sottoshell e lasciare che l'espansione glob avvenga

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

Linux
  1. Ordine di reindirizzamento?

  2. Ordinare parte di un file?

  3. Contare le righe in un file?

  4. C fopen vs open

  5. Come creare un file in Linux dalla finestra del terminale?

Perché uso exa invece di ls su Linux

Comando Bash printf

Editor VIM

Curl Scaricare HTML invece del vero file zip? Ecco cosa fare

Scrivere su file .txt?

Cos'è un file .sh?