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