Am Montag 10 Mai 2010 21:42:36 schrieb Christian Brabandt: Hallo Christian,
On Mo, 10 Mai 2010, Al Bogner wrote:
Am Montag 10 Mai 2010 20:36:58 schrieb Christian Brabandt:
Hallo Christian,
On Mo, 10 Mai 2010, Al Bogner wrote:
Am Montag 10 Mai 2010 11:17:09 schrieb Christian Brabandt:
On Mon, May 10, 2010 10:59 am, Thomas Moritz wrote:
Am Montag, 10. Mai 2010 08:18:49 schrieb Christian Brabandt: > On So, 09 Mai 2010, Al Bogner wrote: > > Es geht darum, dass Dateien in ein neues Verzeichnis kopiert > > werden sollen, wenn der Ordner eine bestimmte Zeichenkette > > enthält und der Dateiname zwischen Anfang und dem ersten "-" > > einen Punkt enthält und die Endung txt ist. > > > > Beispiel: > > > > /dir1/dir2/dir3/abcdef/dir5/1.2-irgendwas.txt > > /dir1/dir2//abcd/dir4/03.11nochwas.txt > > /dir1/dir2/dir3/abcdef/dir5/1-irgendwasanderes.txt > > > > Demnach sollen also die ersten beiden Dateien gefunden werden, > > wenn nach einem "Directory-Inhalt" mit bc gesucht wird, der 3. > > darf nicht gefunden werden, da da vor dem "-" kein Punkt ist. > > find . -path '*bc*' -iregex '.*/[^./-]*\.[^/-]*-.[^/]*\.txt$'
Das passt aber nicht auf solchen Muell wie: 1.23.-a.a-a.txt 1.23.aaa.aaa-.txt
auf die erste schon. Der 2. matcht nur nicht, weil da in der RE noch ein Bug drin ist. Es müsste also eigentlich heißen:
-iregex '.*/[^./-]*\.[^/-]*-[^/]*\.txt$'
(Man beachte den fehlenden Punkt, der verhinderte, dass auf einen Binde- strich das .txt folgen darf).
Ich habe das gerade mit einem Testverzeichnis probiert, sieht ganz gut aus, hat aber noch einen vernachlässigbaren Fehler, wenn "bc" im Dateinamen vorkommt aber _nicht_ in einem Verzeichnis, dann wird das auch gefunden. In der Praxis ist das vernachlässigbar, aber vielleicht kann man das noch verbessern.
Dann pack explizit den Verzeichnistrenner in -path rein. Also so hier: find . -path '*bc*/*' -iregex …
Ja, so funktioniert das, ich kämpfe nur noch mit der Suche als Variable
find /home/ -path '*$1*/*' -iregex '.*/[^./-]*\.[^/-]*-[^/]*\.txt$'
Ich nehmen an, es liegt an ' von '*bc*'. Nur, ob ich die ' einfach weglassen kann, bin ich mir nicht klar. Es scheint aber zu funktionieren.
Nein, solltest Du nicht, das fliegt Dir um die Ohren, wenn Du Leerzeichen in $1 hast. Mach sowas:
Wenn ich das sehe, sieht es ja logisch aus ;-) Ich bin aber sowieso konservativ und verwende keine Leerzeichen bzw. lasse vor wichtigen Dingen ein Script laufen, dass Leerzeichen etc. rauswirft.
find /home/ -path '*'"$1"'*/*' -iregex '.*/[^./-]*\.[^/-]*-[^/]*\.txt$'
Wie kopiere ich dann am besten?
find ... -print0 | xargs -r -0 cp -v /ziel
geht bestimmt auch, ich benutze xargs so selten. Ich würde find kopieren lassen (wie in meiner ersten Antwort erwähnt):
find ... -exec cp -t /ziel {} +
Ich benutze eher xargs, aber mit exec bin ich auch glücklich. Es passt jetzt. Bin schon neugierig ob das Perl-Script schneller ist.
Mit freundlichen Grüßen Christian, find Fan ;)
LOL. Danke! Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org