GNU/Linux >> Tutoriales Linux >  >> Linux

"para archivo en" numéricamente en lugar de alfabéticamente??

Esta pregunta ya tiene respuestas aquí :Iterando carpetas en orden numérico

(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

Linux
  1. C fopen vs abierto

  2. ¿Escribir en un archivo .txt?

  3. cp -L frente a cp -H

  4. Utilizó accidentalmente la redirección de salida > en lugar de una tubería |

  5. ¿Cómo veo du en GB en lugar de MB en Linux?

Por qué uso exa en lugar de ls en Linux

Comando Bash printf

Editor VIM

Curl descargando HTML en lugar del archivo zip real? Esto es lo que debe hacer

¿Qué es un archivo .sh?

cómo descifrar el archivo ecryptfs con clave privada en lugar de frase de contraseña