![Ler lista de texto em matriz dinâmica?](https://rvso.com/image/154485/Ler%20lista%20de%20texto%20em%20matriz%20din%C3%A2mica%3F.png)
Tentando automatizar algumas coisas de trabalho e isso inclui muitas gerações de pastas, mas eu estava pensando em usar um array dinâmico para fazer isso, deixe-me saber como isso soa.
A primeira parte do meu script é exportar uma lista de diretórios usando:
ls /home/USER/Downloads/ > "/home/USER/Desktop/scripts/FolderList.txt"
e fornece a saída conforme esperado:
Folder With Some Long Title
Folder With Another Long Title
Neste exemplo eu dei apenas (2), mas pode haver mais de 1.500 pastas e já escrevi os comandos para criar as outras pastas no meu servidor e nomeá-las automaticamente com base no nome da pasta original, mas o problema que tenho é Quero que meus scripts indexem todas as pastas e pré-formem meus comandos (há cerca de 8 que são principalmente manipulações de strings e coisas assim). Então, eu estava pensando em contar o número de itens no diretório e gravá-los no arquivo de texto mencionado acima e, em seguida, usar um FOR-Loop para executar esse número de vezes que conterá meus cerca de 8 comandos? algum pensamento ou ideia melhor? Posso obter a contagem usando:
wc -l FolderList.txt | awk '{ print $1 }'
Mas não tenho certeza de como criar ou gerenciar um Dynamic Array e usá-lo com o loop for para indexar meus comandos.
aqui está um pouco do script que o acompanha atualmente, alguns comentados para testes 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
Responder1
Seguindo os comandos e comentários, parece que o que você quer fazer é:
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
O loop for externo faz um loop sobre os arquivos /home/USER/Downloads/
(por expansão curinga), configurando TestString
cada nome de arquivo por vez.