el bucle a través de `ls` da como resultado un script de shell bash

Pregunta:

¿Alguien tiene un script de shell de plantilla para hacer algo con ls para obtener una lista de nombres de directorio y recorrer cada uno y hacer algo?

Estoy planeando hacer ls -1d */ para obtener la lista de nombres de directorio.

Respuesta:

Editado para no usar ls donde haría un glob, como sugirieron @ shawn-j-goff y otros.

Simplemente use un bucle for..do..done :

for f in *; do
  echo "File -> $f"
done

Puede reemplazar * con *.txt o cualquier otro elemento global que devuelva una lista (de archivos, directorios o cualquier cosa), un comando que genere una lista, por ejemplo, $(cat filelist.txt) , o reemplazar con una lista.

Dentro del bucle do , simplemente se refiere a la variable del bucle con el prefijo del signo de dólar (entonces $f en el ejemplo anterior). Puede echo o hacer cualquier otra cosa que desee.

Por ejemplo, para cambiar el nombre de todos los archivos .xml en el directorio actual a .txt :

for x in *.xml; do 
  t=$(echo $x | sed 's/\.xml$/.txt/'); 
  mv $x $t && echo "moved $x -> $t"
done

O incluso mejor, si está usando Bash, puede usar expansiones de parámetros de Bash en lugar de generar una subcapa:

for x in *.xml; do 
  t=${x%.xml}.txt
  mv $x $t && echo "moved $x -> $t"
done

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım