Ler lista de texto em matriz dinâmica?

Ler lista de texto em matriz dinâmica?

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 TestStringcada nome de arquivo por vez.

informação relacionada