Textliste in dynamisches Array einlesen?

Textliste in dynamisches Array einlesen?

Ich versuche, einige Arbeitsvorgänge zu automatisieren, und dazu gehört das Generieren vieler Ordner. Dabei habe ich überlegt, hierfür ein dynamisches Array zu verwenden. Lassen Sie mich wissen, wie das klingt.

Der erste Teil meines Skripts besteht darin, eine Verzeichnisliste mit folgendem Befehl zu exportieren:

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

und es wird die erwartete Ausgabe ausgegeben:

Folder With Some Long Title
Folder With Another Long Title

In diesem Beispiel habe ich nur (2) angegeben, aber es könnten mehr als 1500 Ordner vorhanden sein, und ich habe bereits die Befehle zum Erstellen der anderen Ordner auf meinem Server geschrieben und sie automatisch basierend auf dem ursprünglichen Ordnernamen benannt. Mein Problem ist jedoch, dass meine Skripte alle Ordner indizieren und meine Befehle ausführen sollen (es gibt ungefähr 8, die hauptsächlich Zeichenfolgenmanipulationen und dergleichen sind). Ich dachte also daran, die Anzahl der Elemente im Verzeichnis zu ermitteln, sie dann in die oben erwähnte Textdatei zu schreiben und dann eine FOR-Schleife zu verwenden, um diese Anzahl von Malen auszuführen, die meine ungefähr 8 Befehle enthalten wird. Irgendwelche Gedanken oder bessere Ideen? Ich kann die Anzahl folgendermaßen ermitteln:

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

Ich bin mir jedoch nicht sicher, wie ich ein dynamisches Array erstelle oder verwalte und es mit der For-Schleife zum Indizieren meiner Befehle verwende.

hier sind Teile des dazugehörigen Skripts, von denen einige derzeit für modulare Tests auskommentiert sind:

#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

Antwort1

Den Befehlen und Kommentaren zufolge möchten Sie anscheinend Folgendes tun:

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

Die äußere For-Schleife durchläuft alle Dateien /home/USER/Downloads/(durch Platzhaltererweiterung) und legt TestStringnacheinander jeden Dateinamen fest.

verwandte Informationen