Wildcards in find [...] -exec

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
cybersepp
Beiträge: 7
Registriert: 14.05.2007 12:09:10

Wildcards in find [...] -exec

Beitrag von cybersepp » 15.06.2007 12:46:44

Hallo,
ich möchte in meinem Dateisystem nach Ordnern ".Virus" suchen. Der Inhalt des Unterverzeichnisses "new" soll in "cur" verschoben werden. Leider funktionieren Wildcard im -exec Zweig des find Befehls nicht.
Hier mein Befehl:

Code: Alles auswählen

find /var/kunden/mail/ -name ".Virus" -type d -exec mv {}/new/* {}/cur/ \;
Kann mir jemand weiter helfen?

Benutzeravatar
feltel
Webmaster
Beiträge: 10468
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 15.06.2007 13:08:12

Ich würd sagen Du musst das Sternchen mit \ escapen.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Wildcards in find [...] -exec

Beitrag von gms » 15.06.2007 13:15:59

Die "Pathname Expansion" findet bei deinem Kommando schon vor dem Start des find-Kommandos statt. Wenn du das nicht haben möchtest, wäre Quoting eine Alternative:

Code: Alles auswählen

find /var/kunden/mail/ -name ".Virus" -type d -exec bash -c "mv {}/new/* {}/cur/ " \;
Gruß
gms

cybersepp
Beiträge: 7
Registriert: 14.05.2007 12:09:10

Wildcards in find [...] -exec

Beitrag von cybersepp » 15.06.2007 16:28:06

Danke für die Versuche, aber leider hat noch nichts funktioniert.

Wenn ich das Sternchen mit \ escape, habe ich das gleiche Ergebnis. Ich bin der Meinung, dass find [...] -exec nicht mit Wildcards umgehen kann.

Die Variante

Code: Alles auswählen

find /var/kunden/mail/ -name ".Virus" -type d -exec bash -c "mv {}/new/* {}/cur/ " \;
liefert mir als Resultat
ls: /var/kunden/mail/kunde/mail@box.de/.Virus/new/*: No such file or directory
Diese Antwort ist allerdings falsch, denn das Verzeichnis ist vorhanden. Das gleiche Ergebnis erhalte ich mit meiner Variante

Code: Alles auswählen

find /var/kunden/mail/ -name ".Virus" -type d -exec mv {}/new/* {}/cur/ \;

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Wildcards in find [...] -exec

Beitrag von gms » 15.06.2007 17:01:27

cybersepp hat geschrieben:Die Variante

Code: Alles auswählen

find /var/kunden/mail/ -name ".Virus" -type d -exec bash -c "mv {}/new/* {}/cur/ " \;
liefert mir als Resultat
ls: /var/kunden/mail/kunde/mail@box.de/.Virus/new/*: No such file or directory
ist auch klar, wenn das Verzeichnis leer ist
cybersepp hat geschrieben: Diese Antwort ist allerdings falsch, denn das Verzeichnis ist vorhanden.
wenn das Verzeichnis vorhanden ist, aber in ".Virus/new/*" keine Datei findet, kann auch nichts verschoben werden. Teste dieses Kommando nach einem "touch /var/kunden/mail/kunde/mail@box.de/.Virus/new/TEST1" und du wirst sehen, daß TEST1 nach "cur" verschoben wird:

Code: Alles auswählen

gms1 tmp # mkdir -p x/.Virus/new
gms1 tmp # mkdir -p x/.Virus/cur
gms1 tmp # touch x/.Virus/new/TEST1
gms1 tmp # find  -name ".Virus" -type d -exec bash -c "mv {}/new/* {}/cur/ " \;
gms1 tmp # find
.
./x
./x/.Virus
./x/.Virus/cur
./x/.Virus/cur/TEST1
./x/.Virus/new
cybersepp hat geschrieben: Das gleiche Ergebnis erhalte ich mit meiner Variante

Code: Alles auswählen

find /var/kunden/mail/ -name ".Virus" -type d -exec mv {}/new/* {}/cur/ \;
mit dem Unterschied, daß deine Variante selbst dann nichts findet, wenn das "new" Verzeichnis nicht leer ist:

Code: Alles auswählen

gms1 tmp # mv x/.Virus/cur/TEST1 x/.Virus/new/
gms1 tmp # find  -name ".Virus" -type d -exec mv {}/new/* {}/cur/ \;
mv: Aufruf von stat für „./x/.Virus/new/*“ nicht möglich: Datei oder Verzeichnis nicht gefunden
gms1 tmp # find
.
./x
./x/.Virus
./x/.Virus/cur
./x/.Virus/new
./x/.Virus/new/TEST1

cybersepp
Beiträge: 7
Registriert: 14.05.2007 12:09:10

Re: Wildcards in find [...] -exec

Beitrag von cybersepp » 15.06.2007 18:21:15

an gms
Ich gebe mich geschlagen. Du hast recht. Auch wenn ich zuerst dachte "NATÜRLICH HABE ICH DATEIEN IM VERZEICHNIS new" !
Da hat wohl die erste Ausführung Deines Befehls gegriffen und mir das Verzeichnis geleert.

Danke und Gruß

Cybersepp

Antworten