Sponsor-Board.de
Bash: xargs

+- Sponsor-Board.de (https://www.sponsor-board.de)
+-- Forum: Community (/forumdisplay.php?fid=56)
+--- Forum: Hilfe (/forumdisplay.php?fid=102)
+---- Forum: Scripting (/forumdisplay.php?fid=108)
+---- Thema: Bash: xargs (/showthread.php?tid=36919)


Bash: xargs - Madmatti - 16.03.2013 22:20

Hallo Leute,

mein Problem ist wie folgt:
ich habe mehrere Ordner, die durchnummeriert sind, in denen eine Datei namens Baum.java vorhanden ist. Diese kann ich per javac Baum.java kompilieren, dies funktioniert. Nun möchte ich aber ALLE kompilieren. Mein Gedanke war wie folgt:

find /Pfad/zum/web/ordner | grep Baum.java | xargs -d '\n' javac

Denn mit xargs übergebe ich ja die jeweiligen Zeilen an den Befehl am Ende. Allerdings entstehen nun Fehler wie:
/pfad/zum/web/ordner/91/Baum.java:18: duplicate class: Baum
public class Baum extends JApplet implements MouseListener,MouseMotionListener
^
Aber wenn ich einfach es per javac ausführe klappts. Jemand ne Idee warum?

Danke im Voraus

Liebe Grüße
Madmatti


RE: Bash: xargs - Buchstabensalat - 16.03.2013 22:59

find . -name "Baum.java" -exec javac {} \;

Oder halt
find /Pfad/zum/web/ordner -name "Baum.java" -exec javac {} \;

EDIT:
falls du den selben fehler bekommst:
find /Pfad/zum/web/ordner -name "Baum.java" -execdir javac {} \;
Dann wird der befehl in dem jeweiligen ordner ausgeführt und es gibt keine doppelten klassen


RE: Bash: xargs - Querki - 16.03.2013 23:01

Wenn du alle Dateien mit Public class hintereinander kompilieren willst kann das nicht funktionieren...

Such dir ne andere Möglichkeit oder nimm das Public raus. Es kann so nicht mehrere gleiche Public Classen geben.


RE: Bash: xargs - Madmatti - 16.03.2013 23:28

Herzlichen Dank, habe Buchstabensalats Lösung ausprobiert und es klappt alles super. Vielen Dank!

LG Madmatti


RE: Bash: xargs - Madmatti - 18.04.2013 22:15

Hallo,

ich möchte euch gerne eine weitere Frage stellen. Bei unserem Projekt haben wir einen kleinen Wandel gehabt und nun müssen wir anders kompilieren und ich möchte euch erneut um Hilfe bitten bei der korrekten Syntax.
Wir haben erneut einen Ordner Trees, in dem nummerierte Unterordner sind. In jedem Unterordner befindet sich jetzt eine Baum.class, welche man ja mit dem Befehl "java Baum" ausführen kann.
Wir stellen uns den Befehl ca. so vor: find Arbeitsfläche -name "Baum.class" -exec java {} \;
Doch das Problem ist ja die .class Endung (ich selber kenne Java nicht, aber das ist laut meinem Programmierpartner wohl das Problem ;-) ) und wir erhalten dann solch eine Ausgabe:

find /var/www/web1/html -name "Baum.class" -exec java{} \;
find: "java/var/www/web1/html/TourTree/Baum.class": Datei oder Verzeichnis nicht gefunden
find: "java/var/www/web1/html/Trees/91/Baum.class": Datei oder Verzeichnis nicht gefunden
find: "java/var/www/web1/html/Trees/1/Baum.class": Datei oder Verzeichnis nicht gefunden
find: "java/var/www/web1/html/Trees/4/Baum.class": Datei oder Verzeichnis nicht gefunden
find: "java/var/www/web1/html/Trees/5/Baum.class": Datei oder Verzeichnis nicht gefunden
find: "java/var/www/web1/html/Trees/86/Baum.class": Datei oder Verzeichnis nicht gefunden
find: "java/var/www/web1/html/Trees/96/Baum.class": Datei oder Verzeichnis nicht gefunden

Könnte bitte jemand kurz aushelfen? Vielen Dank schonmal im Voraus!

Liebe Grüße
Madmatti


RE: Bash: xargs - Buchstabensalat - 18.04.2013 22:18

find /var/www/web1/html -name "Baum.class" -execdir java $(basename {} .class) \;


RE: Bash: xargs - Dream-Code - 18.04.2013 22:21

Ich verstehe dein Problem bzw. Vorhaben nicht komplett, kann dir aber sagen, dass man wenn man per Konsole eine Java Klasse ausführen will die Endung weglassen muss und nur den Klassennamen schreibt.
Wird dein Problem aber wahrscheinlich nicht beheben.


RE: Bash: xargs - Madmatti - 18.04.2013 22:24

Danke für eure Antworten.
Hehe, ich verstehe es auch nicht so ganz, vielleicht nötige ich einfach meinen Prog.partner sich auch anzumelden und selber zu fragen ;-)

Code:
find /var/www/web1/html -name "Baum.class" -execdir java $(basename {} .class) \;
Exception in thread "main" java.lang.NoClassDefFoundError: //Baum/class
Caused by: java.lang.ClassNotFoundException: ..Baum.class
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: ./Baum.class. Program will exit.
Exception in thread "main" java.lang.NoClassDefFoundError: //Baum/class
Caused by: java.lang.ClassNotFoundException: ..Baum.class
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: ./Baum.class. Program will exit.
Exception in thread "main" java.lang.NoClassDefFoundError: //Baum/class
Caused by: java.lang.ClassNotFoundException: ..Baum.class
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: ./Baum.class. Program will exit.
Exception in thread "main" java.lang.NoClassDefFoundError: //Baum/class
Caused by: java.lang.ClassNotFoundException: ..Baum.class
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: ./Baum.class. Program will exit.
Exception in thread "main" java.lang.NoClassDefFoundError: //Baum/class
Caused by: java.lang.ClassNotFoundException: ..Baum.class
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: ./Baum.class. Program will exit.
Exception in thread "main" java.lang.NoClassDefFoundError: //Baum/class
Caused by: java.lang.ClassNotFoundException: ..Baum.class
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: ./Baum.class. Program will exit.
Exception in thread "main" java.lang.NoClassDefFoundError: //Baum/class
Caused by: java.lang.ClassNotFoundException: ..Baum.class
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: ./Baum.class. Program will exit.


Liebe Grüße
Madmatti


RE: Bash: xargs - Dream-Code - 18.04.2013 22:27

Sollte in meinem Post eigentlich die Lösung stehen. Liegt an der Endung...


RE: Bash: xargs - Buchstabensalat - 18.04.2013 22:30

probier mal: find /var/www/web1/html -name "Baum.class" -execdir java $basename {} .class \;

EDIT: vergiss es Biggrin aber ich tüftel mal weiter.


RE: Bash: xargs - Madmatti - 18.04.2013 22:30

Du hast absolut Recht, ohne .class funktioniert die Geschichte ohne Probleme!
Vielen Dank nochmals an euch!

Liebe Grüße
Madmatti


RE: Bash: xargs - Buchstabensalat - 18.04.2013 22:37

sooo, also.

for file in $(find /var/www/web1/html -name "Baum.class"); do java $(dirname $file)/$(basename $file .class);done

damit solltest du die klassen ohne .class ausführen können.