GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo realizar un bucle for-each sobre todos los archivos en una ruta específica?

El for -loop iterará sobre cada entrada (separada por espacios) en la cadena proporcionada.

En realidad, no ejecuta el find comando, pero siempre que sea como una cadena (que es iterada por for -loop). En lugar de las comillas dobles, use acentos graves o $() :

for line in $(find . -iname '*.txt'); do 
     echo "$line"
     ls -l "$line"
done

Además, si las rutas/nombres de sus archivos contienen espacios, este método falla (ya que el for -loop itera sobre entradas separadas por espacios). En su lugar, es mejor usar el método descrito en la respuesta de dogbanes.

Para aclarar su error:

Como se dijo, for line in "find . -iname '*.txt'"; itera sobre todas las entradas separadas por espacios, que son:

  • encontrar
  • .
  • -nombre
  • '*.txt' (creo...)

Los dos primeros no dan como resultado un error (además del comportamiento no deseado), pero el tercero es problemático ya que se ejecuta:

ls -l -iname

Muchos comandos (bash) pueden combinar opciones de un solo carácter, por lo que -iname es lo mismo que -i -n -a -m -e . Y listo:tu invalid option -- 'e' error!


Aquí hay una mejor manera de recorrer los archivos, ya que maneja los espacios y las líneas nuevas en los nombres de los archivos:

#!/bin/bash

find . -type f -iname "*.txt" -print0 | while IFS= read -r -d $'\0' line; do
    echo "$line"
    ls -l "$line"    
done

Use la sustitución de comandos en lugar de comillas para ejecutar find en lugar de pasar el comando como una cadena:

for line in $(find . -iname '*.txt'); do 
     echo $line
     ls -l $line; 
done

Versión más compacta que trabaja con espacios y saltos de línea en el nombre del archivo:

find . -iname '*.txt' -exec sh -c 'echo "{}" ; ls -l "{}"' \;

Linux
  1. Cómo buscar archivos grandes en la consola

  2. ¿Cómo reemplazar un carácter con otro en todos los nombres de archivo de los directorios actuales?

  3. ¿Cómo encontrar todos los archivos relacionados con un software?

  4. ¿Cómo recorrer directorios en Linux?

  5. Cómo gzip todos los archivos en todos los subdirectorios en bash

Cómo encontrar archivos en Linux con el comando Buscar

Cómo encontrar archivos usando la línea de comandos en la terminal de Linux

Cómo encontrar archivos con el comando fd en Linux

Cómo realizar una búsqueda Grep en todos los archivos y en todos los directorios

¿Cómo desvincular todos los enlaces simbólicos del directorio?

¿Cómo enumerar todos los archivos de una partición en Linux?