Mailinglist Archive: opensuse-de (917 mails)
| < Previous | Next > |
Re: Dateien suchen und kopieren (regex)
- From: Al Bogner <suse-linux@xxxxxxxxxxxxxxxxxxxx>
- Date: Mon, 10 May 2010 22:18:19 +0200
- Message-id: <201005102218.20177.suse-linux@xxxxxxxxxxxxxxxxxxxx>
Am Montag 10 Mai 2010 21:42:36 schrieb Christian Brabandt:
Hallo Christian,
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.
Ich benutze eher xargs, aber mit exec bin ich auch glücklich. Es passt jetzt.
Bin schon neugierig ob das Perl-Script schneller ist.
LOL. Danke!
Al
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
opensuse-de+unsubscribe@xxxxxxxxxxxx
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@xxxxxxxxxxxx
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@xxxxxxxxxxxx
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@xxxxxxxxxxxx
| < Previous | Next > |