Hallo,
wir haben hier bereits ein komplexes Thema Skript Backup mit Variablen Unterordnern zu einem Script laufen und lagern diesen Teil mal nach hier aus:
Bei der jetzigen Suche sieht das wie folgt aus:
1 2 3 #!/bin/bash test="$(basename $(cd $(find -type d -name main)/../.. && pwd))" echo "$test"
USER@rechner:/www/htdocs/USER/test$ bash -x zip2.sh ++++ find -type d -name main +++ cd ./comname4/main ./sammlung2/comname10/main ./sammlung2/comname15/main ./sammlung2/comname7/main ./sammlung2/comname3/main ./sammlung2/comname5/main ./sammlung2/comname13/main ./sammlung2/comname11/main ./sammlung2/comname12/main ./sammlung2/comname14/main ./sammlung1/comname2/main ./sammlung1/comname6/main ./comname9/main ./comname1/main ./comname8/main/../.. +++ pwd ++ basename /www/htdocs/USER/test/comname4/main + test=main + echo main main USER@rechner:/www/htdocs/USER/test$Was ich getestet habe war lediglich das " " bzw. ' ' einzubauen und ../ zu verschieben aber da kam er gar nicht so weit wie in dieser Ausgabe daher gibts da nix zu zeigen. Das Variable in Variable ist da komm ich nicht mit und will ich auch erstmal gar nicht. Muss ja nicht gleich jetzt in diesem Thema die Ganze Syntax Lernen!
Gibt es bei find das Comand -prune? Ich hab auch sowas getestet hier:
1 2 find -type d \(-path comname8 -o \) -name main - print find -type d \(-name comanme8 -prune \) -name main - printAber das scheint wohl nicht so zu geben. Das hab ich jetzt nur als Example geschrieben da ich gerade überhaupt versuche zu verstehen wie ich in find Variablen unterbringen kann in Verbindung mit pwd.
Dein Problem ist also der Befehl mit find und Variablen - dessen Verständnis brauchst du. Erklärt wurde es, nun musst du es noch selber nachvollziehen: Ich versuch es dir in Einzelteile zerlegen - die musst du verstehen, um damit arbeiten zu können:
Erst mal als Tipp nochmal: Arbeite für solche Kleinteile doch direkt mit dem Terminal:
1 2 | $ test="$(basename $(cd $(find -type d -name main)/../.. && pwd))"; echo "$test" sammlung2 |
Geht viel direkter und schneller, auch hier zu posten und diskutieren!
Hier brauchen wir keine detaillierten Ausgaben mit bash -x, hier reicht es, sich vorzuarbeiten. Ich hab mich von innen nach außen vorentwickelt und so musst du es beim Zerlegen in Einzelteile auch wieder machen:
Du nimmst erst den innersten Teil, schaust dir die Ausgaben an. Dann hängst du was dran und schaust dir wieder die Ausgaben an. An meinem Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | $ i="/home/ich/test/zipping/workdir2/sammlung2/comname10"; test="$(basename $(cd $(find "$i" -type d -name main)/../.. && pwd))"; if [[ $test == "workdir2" ]]; then sammlung="."; else sammlung="$test"; fi; echo "$sammlung" sammlung2 # zerlegst du wie folgt, wenn du es verstehen willst/ musst: $ i="/home/ich/test/zipping/workdir2/sammlung2/comname10"; test="$(basename $(cd $(find "$i" -type d -name main)/../.. && pwd))"; if [[ $test == "workdir2" ]]; then sammlung="."; else sammlung="$test"; fi; echo "$sammlung" sammlung2 $ find "$i" -type d -name main /home/ich/test/zipping/workdir2/sammlung2/comname10/main $ cd $(find "$i" -type d -name main)/../.. $ pwd /home/ich/test/zipping/workdir2/sammlung2 $ cd $(find "$i" -type d -name main)/../.. && pwd /home/ich/test/zipping/workdir2/sammlung2 $ basename $(cd $(find "$i" -type d -name main)/../.. && pwd)) bash: Syntaxfehler beim unerwarteten Wort »)« ### Fehler beim Testen sind erlaubt! $ basename $(cd $(find "$i" -type d -name main)/../.. && pwd) sammlung2 $ test="$(basename $(cd $(find "$i" -type d -name main)/../.. && pwd))" $ echo "$test" sammlung2 # Die gewünschten Ausgaben stimmen. Nun testen wir die Bedingungen: $ if [[ $test == "workdir2" ]]; then sammlung="."; else sammlung="$test"; fi; echo "$sammlung" sammlung2 $ if [[ $test == "sammlung2" ]]; then sammlung="."; else sammlung="$test"; fi; echo "$sammlung" . $ # Fazit: Alles funktioniert, von innen nach außen selbst probiert! |
Lies und teste das nach - sonst bin ich zum Thema find-Fragen wieder raus.
Zu deiner zweiten Frage: Die man von find listet -prune auf, ja. Du hast aber keine Fehlermeldung und im Befehl sowieso kein Verzeichnis direkt nach dem Wort find angegeben - die Klammern sind auch sinnlos. Und -prune auch, weil das doch laut man Verzeichnisse ausschließt. Müsste man halt mal genau mit Ausgaben sehn - aber von dir kommen zu deiner letzten Frage ja gerade nur unbrauchbare Bruchstücke ohne Erklärungen und Ausgaben.
Grüße, Benno