Page 1 of 1

Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-17 18:05
by stormcrow
Hallo,

ich hoffe das mir hier jemand helfen kann - Da ich mich erst seit rund 2 Monaten intensiv mit Linux beschäftige sind meine kenntnisse noch nicht so berauschend daher würde ich gerne mal eure Hilfe in Anspruch nehmen :-)

Ich bräuchte ein script welches in einem speziellen Verzeichniss fix numerierte unterverzeichnisse durchgeht (1,2,3,4,5,6,....) (keine ahnung wieviele das sein werden), in die einzelnen verzeichnisse reingeht, die files welche da drinnen sind packt (RAR), das verzeichniss verlässt und mit den Nächsten Verzeichniss weitermacht.


Mein Gedankengang .....

1.) Ich brauch eine funktion welche mal überprüft welche verzeichnisse existieren und diese dann in ein array speichert. (keine ahnung wie das aussehen soll)
2.)
cd $Verzeichniss
rar <parameter>
cd ..

usw.

ich nehme gerne ideen an und im notfall auch ein fertiges script aber mir wären lösungsansätze bzw. eine hilfe mal lieber so das ich das ganze auch verstehe :-)

Danke mal im Vorraus.


lg

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-17 18:09
by Joe User

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-17 18:13
by stormcrow
*HUST*

lernen möchte ich schon aber nicht gleich alles auf einmal :-) (Die seite hab ich aber mal in einem anderen fenster offen und gebookmarkt).

Ansätze oder infos wonach ich suchen soll wären da etwas besser.

momentan lese ich mir grad die man page vom find durch.

mit find -empty hab ich mal die verzeichnisse (wenn ich das richtig verstanden habe.

kann mir mal jemand sagen wie ich so ein array per .sh erstelle und die ausgabe von find dort reinspeichern kann?

also find -empty > $IRRGENDWAS würde ja alles auf einmal in diese variable reinspeichern.


danke im vorraus.

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-17 20:58
by lucki2
kann mir mal jemand sagen wie ich so ein array per .sh erstelle und die ausgabe von find dort reinspeichern kann?
Schon, bringt nur nix:

Code: Select all

dasarray=`find -empty`
also find -empty > $IRRGENDWAS würde ja alles auf einmal in diese variable reinspeichern.
Unfug, damit hast
a) eine Fehlermeldung bekommen
b) irgendwelche Dateien überschrieben(Weiß ja nicht was da in $IRRGENDWAS drin stand).

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-17 21:55
by stormcrow
Aha. danke hab mich mit

array = (`find -empty`) herumgeschlagen aber das hatte so nicht funktioniert.

ok jetzt ist das ganze mal hoffentlich im array drinnen und die kann ich wenn ich das richtig verstanden habe mit

dasarray[1] usw ansprechen.

(btw. hab ich schon mal geschrieben, ich hab von dem sogut wie keine ahnung? In den kursen die ich hinter mir habe wurde das ganze leider nur sowas von kurz angesprochen das ich da keine wirklichen informationen rausziehen konnte.

Aber ok. ich hab jetzt mal die verzeichnisse in diesem array. jetzt muss das ganze abgearbeitet werden.

cd <Verzeichniss>
rar <parameter>
cd ../<Verzeichniss>


aehm .... ich hab jetzt echt keine ahnung mehr. (jaja ich hatte nie eine ^^) - ich weiss leider nicht wie das ganze in dem array abgearbeitet wird - ich hab keine ahnung wie das aussehen soll -> ich habe keine ahnung wie ich das ganze in anderen scripten finden soll :-(

könnte mal wieder bitte jemand so nett sein? :-)

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-17 22:18
by juergen
in diese Richtung:

Code: Select all

find /path -type d -name "[[:digit:]]" -execdir DEINRARKOMMANDO "{}" ";"
Findet aber nur Directories mit einstelligen Zahlen...Das musst du noch entsprechend erweitern.

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-17 23:02
by lucki2

Code: Select all

array=(`find -empty`)
ginge schon(die Zuweisung!) - wenn Du die indizies brauchst.
Sonst:

Code: Select all

dasarray=`find -empty`
for i in $dasarray ; do echo "$i" ; done
aber ob das zum Ziel führt:Zweifel ...
jürgens Beispiel hilft Dir vielleicht mehr weiter als das Spielen mit indizies. Aber wie Du willst ...

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-18 11:05
by stormcrow
Danke mal für eure infos ....

also ich hab es mal so probiert

dasarray=`find -maxdepth 1 -type d -print0 `
for i in $dasarray ; do cd "$i" ; /home/pgw/Tools/rar/rar a "$i" . ; cd .. ; done

mit dem -empty bei find komme ich ja nicht sehr weit da ja nur leere verzeichnisse angezeigt werden :-) - also hab ich den befehl mal abgeändert.
Jetzt hab ich aber das problem, das er mir ./abc ./bcd usw anzeigt. mit dem ./ hab ich ja dann ein problem. Ich versuch mich schon die ganze zeit durch cut und awk durchzulesen aber ich seh mich da nicht so ganz aus.

kann mir bitte jemand sagen wie ich das ./ rauswerfen kann? :-) also find -maxdepth 1 -type d -print0 | <befehl>

danke.

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-18 11:43
by juergen
-print0 solltest du nur verwenden, wenn das Programm, das du über die Pipe-Verbindest auch mit 0-Terminierten Argumenten umgehen kann, also z.b. xargs -0.

Du solltest es übrigens nicht unnötig kompliziert machen:Du kannst mit -execdir für jedes Gefundene Ergebnis ein Programm aufrufen. Cut/awk brauchst du für diese Aufgabenstellung nicht.

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-18 11:49
by Joe User

Code: Select all

dasarray="$(ls -Ap | grep / | sed 's|/$||g')"
for i in $dasarray; do
 cd "$i" &&
 /home/pgw/Tools/rar/rar a "$i" . &&
 cd ..;
done

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-18 12:28
by juergen

Code: Select all

find /DEINPFADZUDENDIRS -type d -name "[[:digit:]]" -o -name "[[:digit:]][[:digit:]]" -execdir rar a -r  /{}.rar {}  ;
Erstellt rar-Files im jeweiligen Parent Verzeichnis. Funktioniert so mit 1- und 2-stelligen Dezimalzahlen. Mit Shell-Globbing geht das leider nicht eleganter.

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-19 02:57
by lucki2
Das ist perfekt. Mit einem -maxdepth 1 dazu ist es ganz perfekt. Sonst bekommst Du Doppel(find und rar sind da rekursiv *g* ).
Dann tut

Code: Select all

for i in  DEINPFAD/{[0-9],}[0-9]/ ; do rar a -r `basename $i`.rar ${i%%/}; done
selbiges. 8)
noch dreistellige dazu:

Code: Select all

for i in  DEINPFAD/{[0-9],[0-9][0-9],}[0-9]/ ; do rar a -r `basename $i`.rar ${i%%/}; done
und dann ist da noch jener hier, dann ist's aber gut:

Code: Select all

shopt -s extglob; for i in  DEINPFAD/*([0-9])/ ; do rar a -r `basename $i`.rar ${i%%/}; done

Re: Script - Rarfiles erstellen - für jedes verzeichniss

Posted: 2006-11-22 09:58
by stormcrow
Hallo,

war leider krank und war nicht wirklich in der lage das ganze durch zu testen.
Jetzt mal schnell die Arbeit aufarbeiten und dann schau ich mir das ganze gleich an.

Danke mal für die Hilfe bis jetzt!


lg