![¿Leer la lista de texto en una matriz dinámica?](https://rvso.com/image/154485/%C2%BFLeer%20la%20lista%20de%20texto%20en%20una%20matriz%20din%C3%A1mica%3F.png)
Estoy tratando de automatizar algunas cosas del trabajo y esto incluye muchas generaciones de carpetas, pero estaba pensando en usar una matriz dinámica para hacer esto, déjeme saber cómo suena.
La primera parte de mi script es exportar una lista de directorios usando:
ls /home/USER/Downloads/ > "/home/USER/Desktop/scripts/FolderList.txt"
y da el resultado esperado:
Folder With Some Long Title
Folder With Another Long Title
En este ejemplo solo di (2), pero podría haber más de 1500 carpetas y ya escribí los comandos para crear las otras carpetas en mi servidor y nombrarlas automáticamente según el nombre de la carpeta original, pero el problema que tengo es Quiero que mis scripts indexen todas las carpetas y ejecuten mis comandos (hay alrededor de 8 que en su mayoría son manipulaciones de cadenas y demás). Entonces, estaba pensando en obtener el recuento de la cantidad de elementos en el directorio, luego escribirlos en el archivo de texto mencionado anteriormente y luego usar un bucle FOR para ejecutar esa cantidad de veces que contendrá mis aproximadamente 8 comandos. ¿Alguna idea o idea mejor? Puedo obtener el recuento usando:
wc -l FolderList.txt | awk '{ print $1 }'
Pero no estoy seguro de cómo crear o administrar una matriz dinámica y usarla con el bucle for para indexar mis comandos.
Aquí hay algunos de los scripts que lo acompañan, actualmente algunos comentados para pruebas modulares:
#TestString="Customer Info (YEAR) [PMNAME] [OWNERNAME] [EETYPE]"
cd "/home/USER/Downloads/"
ls /home/USER/Downloads/ > "/home/USER/Desktop/scripts/FolderList.txt"
wc -l FolderList.txt | awk '{ print $1 }'
#CUSTINFO=${TestString/(*)*}
#YEAR=$(grep -o '(.*)' <<<"$TestString")
#RESO3=$(grep -o '\[.*\]' <<<"$TestString")
#RESO2=${RESO3//\[PMNAME\]/}
#RESO_FINAL=${RESO2//\[EETYPE\]/}
#FULL_NAME=$TITLE_FINAL$CUSTINFO$YEAR
#mv "/home/USER/Downloads/$DOWNLOAD_NAME" "/home/USER/Downloads/$FULL_NAME"
#for f in */* ;do fp=$(dirname "$f"); ext="${f##*.}" ; mv "$f" "$fp"/"$fp"."$ext" ;done
Respuesta1
Siguiendo los comandos y comentarios, parece que lo que quieres hacer es:
for TestString in /home/USER/Downloads/*
do
#CUSTINFO=${TestString/(*)*}
#YEAR=$(grep -o '(.*)' <<<"$TestString")
#RESO3=$(grep -o '\[.*\]' <<<"$TestString")
#RESO2=${RESO3//\[PMNAME\]/}
#RESO_FINAL=${RESO2//\[EETYPE\]/}
#FULL_NAME=$TITLE_FINAL$CUSTINFO$YEAR
#mv "/home/USER/Downloads/$DOWNLOAD_NAME" "/home/USER/Downloads/$FULL_NAME"
#for f in */* ;do fp=$(dirname "$f"); ext="${f##*.}" ; mv "$f" "$fp"/"$fp"."$ext" ;done
done
El bucle for externo recorre los archivos /home/USER/Downloads/
(mediante expansión con comodines), estableciendo TestString
cada nombre de archivo por turno.