Hallo Liste, kennt jemand einen Weg, mit wc ein ganzes Projekt zählen zu lassen über ne geschickte pipe? wc kann zwar mehrere Files auf einmal zählen, auch mit /*, hat aber leider keinen rekursiven Modus. Grüße und Danke Jürgen
Frank Rösle schrieb:
find -name "*.txt" -type f -exec wc {} \;
schickt alle Dateien (einzeln), die auf .txt enden durch wc.
bis denn ... /Frank/
coole Sache, so inspiriert hab ich mal das ausprobiert, das müsste mir doch dann noch die Summe geben (sozusagen das Sahnehäubchen obendrauf): find -name "*.txt" -type f -exec cat {} \; | wc
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Hallo, Jürgen Achberger wrote:
Hallo Liste,
kennt jemand einen Weg, mit wc ein ganzes Projekt zählen zu lassen über ne geschickte pipe?
wc kann zwar mehrere Files auf einmal zählen, auch mit /*, hat aber leider keinen rekursiven Modus.
evtl. sowas: find . -type f -exec wc -c {} \; HTH, gruß, sven
Am 17.06.2003 um 15:39 schrieb Jürgen Achberger:
kennt jemand einen Weg, mit wc ein ganzes Projekt zählen zu lassen über ne geschickte pipe?
wc kann zwar mehrere Files auf einmal zählen, auch mit /*, hat aber leider keinen rekursiven Modus.
Wenn du eine Gesamtzahl für alle Dateien brauchst, kannst du's mit einer einfachen Kommandosubstitution machen: wc -c `find -type f | xargs` Oder z.B. um Quellcodezeilen rekursiv zu zählen: wc -l `find -type f | grep '\.c$' | xargs` Beachte, dass die Anführungszeichen sog. Backticks sind, die du auf einer deutschen Tastatur mit SHIFT+"die Taste rechts neben ß" bekommst! MfG, Dennis
Dennis Stosberg schrieb:
Wenn du eine Gesamtzahl für alle Dateien brauchst, kannst du's mit einer einfachen Kommandosubstitution machen:
wc -c `find -type f | xargs`
Oder z.B. um Quellcodezeilen rekursiv zu zählen:
wc -l `find -type f | grep '\.c$' | xargs`
Danke, ich verstehe jedoch nicht, wofür grep und xargs noch notwendig sind, ohne erhalte ich ein gleiches Ergebnis.
Am 17.06.2003 um 16:37 schrieb Jürgen Achberger:
wc -l `find -type f | grep '\.c$' | xargs`
Danke, ich verstehe jedoch nicht, wofür grep und xargs noch notwendig sind, ohne erhalte ich ein gleiches Ergebnis.
Das Grep filtert alle Dateien heraus die nicht auf ".c" enden. Sollte nur ein Beispiel sein, und betraf nicht deinen konkreten Fall. Das "xargs" ist mit der Bash tatsächlich unnötig! Es macht aus den zeilenweise gelisteten Dateien, die "find" ausgibt, eine leerzeichengetrennte Liste. Ich hab's seit Jahren verwendet und jetzt erst gemerkt, dass es die Bash von selber macht... Und wieder was gelernt. MfG, Dennis
* Dennis Stosberg schrieb am 17.Jun.2003:
Am 17.06.2003 um 16:37 schrieb Jürgen Achberger:
wc -l `find -type f | grep '\.c$' | xargs`
Danke, ich verstehe jedoch nicht, wofür grep und xargs noch notwendig sind, ohne erhalte ich ein gleiches Ergebnis.
Das Grep filtert alle Dateien heraus die nicht auf ".c" enden. Sollte nur ein Beispiel sein, und betraf nicht deinen konkreten Fall.
Das "xargs" ist mit der Bash tatsächlich unnötig! Es macht aus den zeilenweise gelisteten Dateien, die "find" ausgibt, eine leerzeichengetrennte Liste. Ich hab's seit Jahren verwendet und jetzt erst gemerkt, dass es die Bash von selber macht...
Einfacher ist: find . -type f -name "*.c" -exec wc -l {} \; oder find . -type f -name "*.c" | xargs wc -l oder wenn man Leerzeichen in Dateinamen hat: find . -type f -name "*.c" -print0 | xargs -0 wc -l Habe ich jetzt aber nicht überprüft. Bernd -- ROTFL = Rolling On The Floor, Laughing = Auf dem Boden wälzen, lachend. SCNR = Sorry, Could Not Resist = Sorry, Ich konte nicht widerstehen. AFAIK = As Far As I Know = So weit ich weis|BTW = By The Way = Nebenbei bemerkt IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach |Zufallssig. 9
Am 17.06.2003 um 19:06 schrieb Bernd Brodesser:
Einfacher ist:
find . -type f -name "*.c" -exec wc -l {} \;
Das ist ja das Schöne, dass es so viele Möglichkeiten gibt, um zum Ziel zu kommen. Einfacher ist es so vielleicht, aber du bekommst auch keine Gesamtsumme am Ende.
oder wenn man Leerzeichen in Dateinamen hat:
find . -type f -name "*.c" -print0 | xargs -0 wc -l
Leerzeichen in Dateinamen sind natürlich ein gewichtiges Argument für diese Variante. In dem Fall müsste man in der Kommandosub- stitution mit "sed" Gänsefüßchen um die Dateinamen setzen. Möglich, aber irgendwie umständlich. MfG, Dennis
Hallo, On Tue, 17 Jun 2003, Dennis Stosberg wrote:
Am 17.06.2003 um 19:06 schrieb Bernd Brodesser:
Einfacher ist:
find . -type f -name "*.c" -exec wc -l {} \;
Das ist ja das Schöne, dass es so viele Möglichkeiten gibt, um zum Ziel zu kommen. Einfacher ist es so vielleicht, aber du bekommst auch keine Gesamtsumme am Ende.
find . -type f -name "*.c" -exec wc -l {} \; | \ awk '{l+=$1;w+=$2;c+=$3;} END{print l "\t" w "\t" c;}' Gerade fuer sowas wie Spalten summieren usw. ist awk ideal und universell :) -dnh -- 126: Netzcomputer Ein Netzcomputer ist ein Rechner, der vollständig vom Netz abhängig ist. (ECONY 2/99)
* David Haller schrieb am 18.Jun.2003:
On Tue, 17 Jun 2003, Dennis Stosberg wrote:
Am 17.06.2003 um 19:06 schrieb Bernd Brodesser:
Einfacher ist:
find . -type f -name "*.c" -exec wc -l {} \;
Das ist ja das Schöne, dass es so viele Möglichkeiten gibt, um zum Ziel zu kommen. Einfacher ist es so vielleicht, aber du bekommst auch keine Gesamtsumme am Ende.
find . -type f -name "*.c" -exec wc -l {} \; | \ awk '{l+=$1;w+=$2;c+=$3;} END{print l "\t" w "\t" c;}'
Gerade fuer sowas wie Spalten summieren usw. ist awk ideal und universell :)
Der Backslash am Ende der ersten Zeile ist überflüssig, da als letztes ein | steht und somit der Befehl noch nicht abgeschlossen. Aber das ist nicht der Grund, warum ich schreibe. Ich schreibe, weil Du offensichtlich Zeilen, Wörter und Zeichen aufaddieren willst, daß verträgt sich aber nicht mit dem -l nach wc. So werden nur die Zeilen angezeigt. Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0
Hallo, On Wed, 18 Jun 2003, Bernd Brodesser wrote:
* David Haller schrieb am 18.Jun.2003: [..]
find . -type f -name "*.c" -exec wc -l {} \; | \ awk '{l+=$1;w+=$2;c+=$3;} END{print l "\t" w "\t" c;}' [..] Aber das ist nicht der Grund, warum ich schreibe. Ich schreibe, weil Du offensichtlich Zeilen, Wörter und Zeichen aufaddieren willst, daß verträgt sich aber nicht mit dem -l nach wc. So werden nur die Zeilen angezeigt.
*argsl* Ja, sollte '-exec wc {} \;' sein. Ich hab das genommen, um zu zeigen, dass man auch mehrere Spalten parallel summieren kann ;) Die Variante fuer 'wc -l' ist dann ja trivial abzuleiten. -dnh -- Die ultimativen Man-Pages haben ein ".c" als Dateiendung. -- am DLUG-Stammtisch
On Die, 17 Jun 2003 at 16:13 (+0200), Dennis Stosberg wrote:
Am 17.06.2003 um 15:39 schrieb Jürgen Achberger:
kennt jemand einen Weg, mit wc ein ganzes Projekt zählen zu lassen über ne geschickte pipe?
wc kann zwar mehrere Files auf einmal zählen, auch mit /*, hat aber leider keinen rekursiven Modus.
Wenn du eine Gesamtzahl für alle Dateien brauchst, kannst du's mit einer einfachen Kommandosubstitution machen:
wc -c `find -type f | xargs`
Oder z.B. um Quellcodezeilen rekursiv zu zählen:
wc -l `find -type f | grep '\.c$' | xargs`
Warum ein extra grep, sowas kann der find doch selber: -name "*.c" Die beiden Kommandos gehen aber schief, wenn Du sehr viele Dateien hast, dann schlägt nämlich die Länge des Argument-Puffers zu. Eine universellere Variante (und diesmal mit einem notwendigen xargs ;-) find . -name "*.c" -type f -print | xargs wc -l Dann kommt auch eine Summe. Jan
participants (7)
-
B.Brodesser@t-online.de
-
David Haller
-
Dennis Stosberg
-
Frank Röske
-
Jan.Trippler@t-online.de
-
Jürgen Achberger
-
Sven Schupp