Bash Sript, Absolute Pfade bei Variablen nutzen?

M

Massaguana

Aktives Mitglied
Thread Starter
Dabei seit
03.06.2008
Beiträge
972
Reaktionspunkte
77
Hallo.

ich sitze hier an einem neues bash script das ich für neue Anforderungen anpassen möchte. Leider sind meine bash Script Kenntnisse dafür nicht ausreichend. Ich verstehe nicht komplett was passiert...

Das Script:
Code:
find . -iname '*.rar' | while read file; do
(
DIRNAME=$(dirname "${file}")
BASENAME=$(basename "${file}")
cd "${DIRNAME}"
unrar x "${BASENAME}"
NEW=$DIRNAME
mv *.mdb "${NEW}".mkv
mv *.mdb /home/USER/"$DESTINATION"
rm -rf /home/USER/"${DIRNAME}"
)
done

Das ganze funktioniert so lange wie die Ordner die ich damit bearbeite in /home/USER/ liegen und nur eine ebene haben. Nun möchte ich das selbe aber mit Ordnern machen die Unterordner haben. Der für mich Interessante Ordner ist der unterste...
Die Struktur sieht folgendermaßen aus:


bisher gab es nur die Unterordner...

Könnt Ihr mir helfen das Script dahin gehend anzupassen?

Grüße
Massaguana
 
Formulier doch mal, was dein script überhaupt anstellen soll.
Der erste teil ist klar, das könnte man auch noch vereinfachen, nur was soll der mv/rm-teil?
 
Das ganze ist nur ein Teil eines Scripts. Aufgabe des Scriptes ist folgendes:

- Download von Daten per FTP. Auf der Platte landen Ordner mit Unterordnern in denen Split rar Archive liegen.

Dann kommt der Teil zu Tragen den ich oben zeige. Seine Aufgabe ist es:

- Die Archive zu entpacken
- Die Entpackten mdb Dateien sollen dann so wie der Ordner in dem Sie liegen Umbenannt werden. Also wie der Unterste Ordner. In meinem Beispiel z.B. "BackupSystem1-20170502"
- Die so Umbenannten Dateien sollen dann Ordner $Destination verschoben werden.
- Die Original Ordner werden dann gelöscht.

Aus dem Ordner $Destination wandern die Dateien dann auf ein anderes System.

Hier findet Ihr das ganze Script so wie es aktuell nutze: https://github.com/Massaguana/Scripts/blob/master/DownUpRenameRcloning

Ich hoffe ich konnte es Verständlich erklären was ich machen möchte.
 
Da müßte man jetzt den gesamten Kontext kennen, entweder eine äußere Schleife für die Systeme drum herum oder eben die Backup-Ordner per regex erkennen und dann einen Datenordner rekursiv nach ihnen durchsuchen.
 
Was möchtest du denn noch wissen? Mir ist nicht ganz klar was ich noch Schreiben kann was ich hier tue...

Kurz gesagt, ich lade Backups von einem FTP Server herunter, entpacke diese, benenne diese um und lade Sie in ein neues System hoch... Damit dass nicht über meine Heimleitung gehen muss mache ich dies remote auf einem Server.
 
Naja unklar ist, ob die Verzeichnistiefe dann so bleibt oder ob es noch weitere Zwischenebenen geben kann und ob die Liste der Systeme bekannt/endlich ist. Je nachdem wie definiert die Struktur ist, könnte man halt ein Arbeitsverzeichnis festlegen, über alle enthaltenen system-verzeichnisse iterieren und darin dann den eigentlichen Job machen. Wenn aber Zwischenstrukturen entstehen können (also andere Verzeichnistiefen) dann müßte man anders agieren. Auch ist ja unbekannt was in den verzeichnissen steht. Ist da noch mehr drinnen oder sind das die einzigen .mdb Datenbankdateien. Ich würde auch Funktionen zur Gliederung verwenden, das steigert die Lesbarkeit.

Da geht Einiges, man muß dazu nur mal nen Testbestand an Daten haben der repräsentativ ist und Zeit.
 
Also soweit ich es sagen kann würde ich die Verzeichnistiefe nicht weiter erhöhen. Die Liste der Systeme ist aber Unendlich/ Unbekannt. In den Verzeichnissen liegen *.rar Dateien. Ich möchte das ganze nicht zu komplex gestalten da ich es als halb Laie es ja noch überblicken muss/ möchte. Ich hatte darüber Nachgedacht ein komplexes system das alles was ich so tue Automatisiert, dies würde aber wohl sehr aufwendig werden. Das müsste ich dann von einem Profi machen lassen.

Ein Testbestand an Daten wie Sie wirklich auf dem Server liegen kann ich euch nicht geben. Sie enthalten sehr Sensible Kundendaten. Daher hatte ich alles Umbenannt oder Anonymisiert.

Aktuell Arbeite ich so das ich das Script 2 geteilt habe. Eines lädt die Daten herunter. Dann muss ich manuell die Subfolder in den User home folder legen. Dann starte ich das 2 Script das die Daten entpackt, Umbenennt und weg schiebt. Das Klappt. Das beseitigen einer Ebene ist nicht sehr aufwendig, sind nur ein paar Minuten. Aber ich muss es halt selbst tun. Es kommt also Vor das das System 10h wartet bis ich wieder da bin... das schmälert den Durchsatz. Mein Durchsatz wird ja auch durch die HDD Kapazität/ Leistungsfähigkeit des Systems begrenzt, aktuell sind es 500 GB die ich nutzen kann. Ich benötige Platz zum entpacken und bevor die Daten nicht weg geschoben sind kann ich nichts neues Starten.
 
Vielleicht wäre es eine Möglichkeit, Umgebungsvariablen wie $PWD (aktuelles Arbeitsverzeichnis) oder $HOME (Homedirectory) noch mit einzubinden oder Kommandosubstitution zu nutzen.

Gibt es eine Möglichkeit auf dem Server selbst zu "skripten" wo Du die Archive per FTP abholst? Dann könnstest Du ggf. auch mit scp arbeiten um Dateien über das Netzwerk zu transferieren. Da hättest Du einen Gewinn in Punkto Sicherheit. rclone sagt mir so erstmal garnichts.

Mit anderen Worten: Ist es zwingend erforderlich, dass die Dateien auf deinem Rechner zwischenspeichern und bearbeiten musst?
 
Ja, das Bearbeiten der Dateien auf meinem Rechner ist zwingend erforderlich... auf dem FTP kann ich nichts ausführen, reiner FTP Zugriff... daher muss ich alles auf meinem Rechner erledigen...
 
Also es gibt zumindest bei mkdir eine Option namens -p, dass man Unterhierarchien direkt "in einem Rutsch erstellen kann". Verzeichniswechsel geht sicherlich mit "cd" und vielleicht gibt es eine Option, dass er dann in die tiefste Ebene eines Verzeichnisses einsteigt aber was macht man dann wenn mehrere Unterverzeichnisse in der gleichen Ordnerebene vorhanden sind? Bzw. wie soll der Computer wissen, in welches Verzeichnis er "hinabsteigen" soll?

bash-Skripten kann man sicherlich noch Parameter beim Aufruf mitgeben. Das wäre erstmal, das was mir "on top of my head" einfällt.
 
Zurück
Oben Unten