Dateien suchen und dann ausführen
Klaus
- webserver
0 seth_not@home0 Thilo Fester0 Klaus0 Klaus0 seth_not@home0 Klaus
Hi
ich möchte alle ./*/xyz.sh Dateien ausführen
folgendes hab ich bis jetzt versucht
./*/xyz.sh;
find ./*/ -type f -name xyz.sh |xargs sh;
find ./*/ -type f -name xyz.sh -exec sh {} \;
die Lösung ist bestimmt ganz einfach - nur ich komm nicht drauf :-(
Klaus
gudn tach!
find ./*/ -type f -name xyz.sh |xargs sh;
sollte eigentlich funzen. geht allerdings nicht, wenn dort relative pfadangaben gemacht werden, die von deiner aktuellen position aus nicht passen.
find ./*/ -type f -name xyz.sh -exec sh {} ;[/code]
maskiere die braces mit backslashes, also: -exec sh {} ;
ansonsten siehe oben, allerdings wird hier nicht wie oben
sh foo/xyz.sh bar/xyz.sh ...
sondern
sh foo/xyz.sh
sh bar/xyz.sh
...
ausgefuehrt.
wenn du das working directory jeweils mitaendern willst, nutze statt "exec" "execdir".
prost
seth
Hey!
find ./*/ -type f -name xyz.sh | xargs sh;
Das funktioniert bei mir soweit.
Das einzige Problem, was ich festgestellt habe ist dabei, dass eben auch Dateien aus dem aktuellen Verzeichnis gefunden werden.
Lösung:
find ./?*/ -type f -name xyz.sh | xargs sh;
Das Fragezeichen sorgt dafür, dass die Ordner im Verzeichnis mit mindestens einem Zeichen versehen sein müssen. Sonst landet man eben in .// und das hat offensichtlich die gleiche Bedeutung wie ./
Beste Grüße
~ Thilo
Hi
Danke euch beiden
der Fehler lag bei mir
die Dateien wurden ausgeführt... gaben jedoch nichts aus, da eine Variable einen falschen Wert hatte :-\
eine Frage hätte ich noch
find /opt/pdadmin/addons/share/ -type f -name "*uninstall.sh" -exec sh {} ;
oder
find /x/y/z/ -type f -name "*xyz.sh" -exec sh {} ;
bringt bei mir folgenden Fehler
find: Der Pfad muß vor dem Suchkriterium stehen.
Usage: find [-H] [-L] [-P] [path...] [expression]
find: Der Pfad muß vor dem Suchkriterium stehen.
Usage: find [-H] [-L] [-P] [path...] [expression]
[...]
wenn ich das ganze ohne -exec aufrufe, erhalte ich die absoluten Pfade
Klaus
Hi
folgendes funktioniert auch nicht :-\
/x/y/z/*xyz.sh
find: Der Pfad muß vor dem Suchkriterium stehen.
Usage: find [-H] [-L] [-P] [path...] [expression]
find: Der Pfad muß vor dem Suchkriterium stehen.
Usage: find [-H] [-L] [-P] [path...] [expression]
Klaus
gudn tach!
find /opt/pdadmin/addons/share/ -type f -name "*uninstall.sh" -exec sh {} ;
oder
find /x/y/z/ -type f -name "*xyz.sh" -exec sh {} ;bringt bei mir folgenden Fehler
find: Der Pfad muß vor dem Suchkriterium stehen.
Usage: find [-H] [-L] [-P] [path...] [expression]
hmm, bei mir klappt's. hab hier gnu find 4.2.28.
oh, bei mir klappt's sogar, wenn ich die braces nicht maskiere. ich dachte, man muesse das. im find-manual steht, dass diese "constructions might need to be escaped". haengt vielleicht von der shell ab? evtl. sind's die anfuehrungszeichen. kann sein, dass "*xyz.sh" bei dir dasselbe ist wie *xyz.sh (ohne anf.zeichen) und das willst du nicht.
was passiert bei einfachen anfuehrungszeichen '*xyz.sh'?
prost
seth
Hi
ich hab es jetzt erst einnmal wie folgt gelöst
for i in $(find /x/y/z/ -type f -name *.xyz.sh); do
$i;
done
das Konstrukt tut das, was ich will :-)
GNU find Version 4.2.31
Built using GNU gnulib version 2007-02-24
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION
Klaus