(6 respuestas)
Cerrado hace 3 años.
Tengo un script que genera un índice basado en cada archivo en una carpeta. Todos los nombres de archivo son un número con extensión.
¿Cómo puedo modificar mi ciclo para procesarlos en orden numérico?
for file in xml/*.xml; do
...
done
Respuesta aceptada:
Si tiene GNU sort
que tiene la opción de delimitar en el \0
delimitador que puedes hacer. De esta forma el while
loop comenzará a obtener archivos en el orden ordenado para que los procese. Reemplace el printf
opción con su propia lógica personalizada.
shopt -s nullglob
printf '%s\0' xml/*.xml | sort -zV | while read -rd '' file; do
printf "%s\n" "$file"
done
shopt -u nullglob
El nullglob
La opción es evitar que Shell expanda un globo vacío si no hay xml
los archivos se encuentran en la carpeta actual. La opción -u
lo desarma después de que haya terminado su procesamiento.
Como señala acertadamente Tony Speight, si no quiere meterse con las opciones de shell (por ejemplo, puede habilitarse por otros motivos), puede configurar el subshell y dejar que se produzca la expansión global
( shopt -s nullglob; printf '%s\0' xml/*.xml ) | sort -zV | while read -rd '' file; do
printf "%s\n" "$file"
done