Hallo!
find . | grep foo | xargs -iXX echo XX
Klappt nicht, wenn ein Dateiname z.b ein ' beinhaltet. Gibt es eine quote-funktion damit ich XX quoten kann?
Alternative: "find . -print0" klappt leider nicht, weil grep nicht mit dem \0 am Ende zurechtkommt.
thomas
Hallo Thomas,
Am Mittwoch, dem 06. März 2002 um 19:42:43, schrieb Thomas Guettler:
find . | grep foo | xargs -iXX echo XX
Mir ist nicht ganz klar, was der Unterschied zu
find | grep foo
ist. Vielleicht erklärst du ein bisschen, was du eigentlich machen willst. Bestimmt gibt es ein perl-Einzeiler dafür! ;-)
"find . -print0" klappt leider nicht, weil grep nicht mit dem \0 am Ende zurechtkommt.
grep -z grep --null-data
Torsten
On Wed, Mar 06, 2002 at 09:39:53PM +0100, Torsten Werner wrote:
Hallo Thomas,
Am Mittwoch, dem 06. März 2002 um 19:42:43, schrieb Thomas Guettler:
find . | grep foo | xargs -iXX echo XX
Mir ist nicht ganz klar, was der Unterschied zu
find | grep foo
ist. Vielleicht erklärst du ein bisschen, was du eigentlich machen willst. Bestimmt gibt es ein perl-Einzeiler dafür! ;-)
Im Moment ist es für mich ein theoretisches Problem:
Normalerweise arbeite ich mit "rm `find . | grep foo`" um z.B. alle Dateien zu löschen die "foo" enthalten. Meine Dateien enthalten keine Sonderzeichen. Aber was, wenn doch Sonderzeichen drin sind?
Das ganze soll mit normalen Shell Möglichkeien (Bash) funktionieren.
Bei Dateien wie in folgendem Verzeichnis fliegen einem die meisten Shell Script um die Ohren:
--guettli@sonne:~/tmp$ ls -l total 0 -rw-r--r-- 1 guettli guettli 0 Mar 6 23:00 a $ B -rw-r--r-- 1 guettli guettli 0 Feb 27 08:39 a ' b -rw-r--r-- 1 guettli guettli 0 Feb 27 08:39 a * b -rw-r--r-- 1 guettli guettli 0 Feb 27 08:39 a b
Hier eine Lösungsvariante
--guettli@sonne:~/tmp$ find . | grep a | sed "s/'/\'/" | xargs -iXX echo 'XX' ./a b ./a ' b ./a * b ./a $ B
Will man z.B. rekursiv alle Dateien löschen die foo enthalten muss "a" durch "foo" und "echo" durch "rm" ersetzen. Der sed-Teil ist nötig, falls eine Datei ein ' (Einfaches Hochkomma) enthält.
Alternativen wären interessant.
thomas
Am Mittwoch, dem 06. März 2002 um 23:07:51, schrieb Thomas Guettler:
Normalerweise arbeite ich mit "rm `find . | grep foo`" um z.B. alle Dateien zu löschen die "foo" enthalten. Meine Dateien enthalten keine Sonderzeichen. Aber was, wenn doch Sonderzeichen drin sind?
find -name '*foo*' -exec rm '{}' ;
Das ganze soll mit normalen Shell Möglichkeien (Bash) funktionieren.
Weder find, noch grep oder xargs gehören zur bash. Allerdings war meine perl-Bemerkung mehr als kleiner Seitenhieb gedacht. ;-)
--guettli@sonne:~/tmp$ find . | grep a | sed "s/'/\'/" | xargs -iXX echo 'XX'
Warum nicht
find -print0 | grep -zZ foo | xargs -0 echo
?
Torsten
On Thu, Mar 07, 2002 at 09:12:30AM +0100, Torsten Werner wrote:
--guettli@sonne:~/tmp$ find . | grep a | sed "s/'/\'/" | xargs -iXX echo 'XX'
Warum nicht
find -print0 | grep -zZ foo | xargs -0 echo
Weil die Zeile nur von GNU-Extensions lebt und man manchmal ohne diese auskommen muß?
Reinhard
Am Donnerstag, dem 07. März 2002 um 12:56:23, schrieb Reinhard Foerster:
Weil die Zeile nur von GNU-Extensions lebt und man manchmal ohne diese auskommen muß?
Ich noch nie, weil ich es bisher immer einfacher fand, die GNU-Tools zu kompilieren, statt mit broken Tools zu arbeiten. Heute würde ich wahrscheinlich einfach perl kompilieren. Übrigens fragte Thomas nach einer bash-Lösung, was auch ein GNU-Tool ist.
Tschüss, Torsten
lug-dd@mailman.schlittermann.de