Прочитать текстовый список в динамический массив?

Прочитать текстовый список в динамический массив?

Пытаюсь автоматизировать некоторые рабочие процессы, в том числе создание множества папок, но я думал об использовании для этого динамического массива. Дайте мне знать, как это звучит.

Первая часть моего скрипта — экспорт списка каталогов с помощью:

ls /home/USER/Downloads/ > "/home/USER/Desktop/scripts/FolderList.txt"

и он выдает ожидаемый результат:

Folder With Some Long Title
Folder With Another Long Title

В этом примере я указал только (2), но папок может быть более 1500, и я уже написал команды для создания других папок на моем сервере и автоматического присвоения им имен на основе исходного имени папки, но проблема в том, что я хочу, чтобы мои скрипты индексировали все папки и выполняли мои команды (их около 8, в основном это манипуляции со строками и т. п.). Поэтому я думал о том, чтобы получить количество элементов в каталоге, а затем записать их в текстовый файл, упомянутый выше, а затем использовать цикл FOR для запуска этого количества раз, которое будет содержать мои 8 или около того команд? Есть мысли или идеи получше? Я могу получить количество с помощью:

wc -l FolderList.txt | awk '{ print $1 }'

Но я не уверен, как создать или управлять динамическим массивом и использовать его с циклом for для индексации моих команд.

Вот часть скрипта, который в настоящее время идет с ним, некоторые из них закомментированы для модульного тестирования:

#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

решение1

Судя по командам и комментариям, похоже, что вы хотите сделать следующее:

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

Внешний цикл for перебирает файлы /home/USER/Downloads/(путем расширения подстановочных знаков), TestStringпоочередно устанавливая каждое имя файла.

Связанный контент