Klaus: Dateien suchen und dann ausführen

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

  1. 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

  2. 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
    
  3. 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

    1. 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

    2. 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

      1. 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