ubuntuusers.de

batch script befehl in unterordner

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

pelero123

Anmeldungsdatum:
26. Januar 2017

Beiträge: 2

Hallo,

nach nun 2 Tagen mit googlen und probieren etc. bin ich in einer Sackgasse angekommen. Vielleicht hat jemand für mein Problem eine Lösung.

Folgende Situation:

In einem Ordner ( nennen wir ihn mal original), liegen mehrere Ordner mit Unter- und Unterunterordner usw. In jedem dieser Ordner liegen mehrere Dateien, verschiedener Formate. Diese Dateien sollen alle einzeln verschlüsselt werden. Nicht die Ordner. Die verschlüsselten Dateien soll dann in einem 2. Ordner (nennen wir in mal crypt) in der selben Verzeichnisstruktur wie im original abgelegt werden. zB: original:

/original/1/2/3/4/datei.abc

crypt:

/crypt/1/2/3/4/datei.abc.crypt

Die Verschlüsselung erfolgt über ein Passwort was zu beginn eingegeben werden muss.

Mit folgendem Skript bekomme ich zumindest schon mal die Verschlüsselung in dem Ordner hin, in dem das Skript liegt, und für alle Dateien in diesem Ordner.

1
2
3
4
5
6
#!/bin/sh
read -p "PW:" passwd

for file in */*.*
do openssl enc -e -aes256 - in "$file" -out "$file".crypt -pass pass:$passwd
done

Probleme sind nun noch:

  1. Die Ausgabe der erfolgt nicht in einem crypt ordner - > kann nur mittels crypt/"$file" in einem Unterordner im original ablegen → fehlende Ordner werden nicht automatisch erstellt

  2. Unterordner werden nicht durchlaufen

  3. Das Skript muss in dem original Ordner liegen. Hätte lieber das flexibel mit Eingabe des original Ordners sowie des crypt-Ordners. → aber wie?

  4. Eine doppel Abfrage des PW (verborgen) und Überprüfung ob sie stimmen wäre auch noch nice to have.

Kann mir da jemand behilflich sein?

Schon mal Danke!

Grüße

pelero123

Bearbeitet von redknight:

Formatierung repariert.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hi pelero123,

erstmal herzlich willkommen hier auf dem Forum !

Ich würde die Geschichte ja genau anders herum aufzäumen:

  1. Zuerst die Dateien alle finden → ist etwas für find ... -exec mit einem kleinen Skript dahinter.

  2. Dieses Skript macht dann die eigentliche Arbeit. (egal ob es mit in der Zeile steht, oder extra)
    Allerdings ist ein Einlesen des Passworts mir read dann natürlich sinnlos (und unsicher sowieso).
    → da müsste man dann nochmal extra gucken, wie man das sicher hinkriegt.

LG,

track

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Ungetestet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
#
# moveto.sh datei dir
#
# legt dir an, wenn es nicht existiert und verschiebt die Datei dahin.
#
datei=$1
ziel=${datei%\/*}
# echo $ziel
test -d $2/$ziel || mkdir -p $2/$ziel
mv $datei $2/$ziel

Mit man bash und da dann /##-Enter kommst Du rasch in die Sektion der Stringsubstitution. Da dann noch 1-2x Bild auf um zu ${parameter%word} zu kommen. Wir schneiden von datei /* ab. Mit test -d prüfen wir ob das Verzeichnis existiert, wenn nicht legen wir es (samt Elternverzeichnissen, so nötig) an und verschieben die Datei. Testsetting:

1
2
3
4
5
6
7
8
t201:~/proj/mini/forum/tmp/nr/original > find
.
./sub1
./sub1/sub2
./sub1/sub2/bar
./sub1/sub2/up3
./sub1/foo
./moveto.sh

Beachte: Ich bin schon in original drin und moveto.sh ist hier lokal vor Ort. Wenn man das mehr als für eine Großaktion braucht legt man es lieber in einen Ordner im Pfad.

Beide Kommandos kann man mit 2 -exec-Befehlen in find kombinieren.

1
2
3
4
5
6
7
8
9
find -type f -exec openssl enc -e -aes256 -in "{}" -out "{}".crypt -pass pass:$passwd ";" -exec ./moveto.sh "{}".crypt ../crypt/ ";" 
#
t201:~/proj/mini/forum/tmp/nr/original > find ../crypt 
../crypt
../crypt/sub1
../crypt/sub1/sub2
../crypt/sub1/sub2/bar.crypt
../crypt/sub1/foo.crypt
../crypt/moveto.sh.crypt

Die Nachbarschaft von original und crypt zu entkoppeln ist als Übung Dir überlassen. 😉

Up3 ist ein symbolischer Link aus einem anderen Gebastel und wurde nicht verschlüsselt.

pelero123

(Themenstarter)

Anmeldungsdatum:
26. Januar 2017

Beiträge: 2

vielen dank für die Antworten. Leider war ich die letzten Tage beruflich verhindert, so dass ich nun erst dazu komme mal die Antworten zu probieren. Meld mich sobald ich erfolgreich das umgesetzt habe was ich vor habe, oder wenn ich noch Probleme habe.

Antworten |