Hallo,
ich hab ein Verzeichnis, den Unterverzeichnissen:
aepfel
brinen
orangen
bananen
himbeeren
Jetzt möchte ich mit find alle Verzeichnisse außer "orangen" und "bananen/nuesse" (also bananen schon, aber nicht das Unterverzeichnis von bananen, names "nuesse" durchsuchen). Die manpage schlägt "-prune" vor, klappt aber nicht.
find . ! orangen ! bananen\/nuesse -name .... klappt auch nicht
Wer hat des Rätsels Lösung ?
Verzeichnisse aus 'find' ausschliessen
Re: Verzeichnisse aus 'find' ausschliessen
man muss ein bisserl mit relativen pfaden jonglieren, dann funzts:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
$ pwd
/home/ratte/temp
$ ls
perl schwob
$ find . -path './schwob' -prune -o -print
.
./perl
./perl/1
$ # good, hurrey
$
$ cd ../
$ pwd
/home/ratte
$ find temp -path './temp/schwob' -prune -o -print
temp
temp/perl
temp/perl/1
temp/schwob
temp/schwob/webschwob.lex
temp/schwob/lex.yy.c
$ # not so good, what a pity
$
$ find ./temp/ -path './temp/schwob' -prune -o -print
./temp/
./temp/perl
./temp/perl/1
$ # very good, double-hurrey
</font><hr></pre></blockquote>
ratte
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
$ pwd
/home/ratte/temp
$ ls
perl schwob
$ find . -path './schwob' -prune -o -print
.
./perl
./perl/1
$ # good, hurrey
$
$ cd ../
$ pwd
/home/ratte
$ find temp -path './temp/schwob' -prune -o -print
temp
temp/perl
temp/perl/1
temp/schwob
temp/schwob/webschwob.lex
temp/schwob/lex.yy.c
$ # not so good, what a pity
$
$ find ./temp/ -path './temp/schwob' -prune -o -print
./temp/
./temp/perl
./temp/perl/1
$ # very good, double-hurrey
</font><hr></pre></blockquote>
ratte
Re: Verzeichnisse aus 'find' ausschliessen
Danke. Wenn mich nicht alle täuscht, hatte ich das "-o" nach dem "-prune" vergessen. Werds heut abend mal probieren, wenn das Wetter es denn zuläßt
Re: Verzeichnisse aus 'find' ausschliessen
find . ! -name orangen ! -name bananen\/nuesse ... (jede -name-Option wird durch ! invertiert, wildcard * per \ quoten: \* )
Gruss, Clemens
Gruss, Clemens
Last edited by cd on 30. Jul 2002 7:02, edited 1 time in total.
Re: Verzeichnisse aus 'find' ausschliessen
hallo Clemens,
also bei mir klappt das mit dem negieren nicht er ignoriert das einfach. Ich habe es einige male probiert, dabei immer wieder kontrolliert ob ichs falsch geschrieben habe. Leider nicht.
Gruß
Basti_litho
also bei mir klappt das mit dem negieren nicht er ignoriert das einfach. Ich habe es einige male probiert, dabei immer wieder kontrolliert ob ichs falsch geschrieben habe. Leider nicht.
Gruß
Basti_litho
Re: Verzeichnisse aus 'find' ausschliessen
Hallo,
also ich glaube ich habe des Rätsels lösung gefunden:
Um ein Verzeichniss oder eine Datei auszuschließen muss man entweder für jedes Verzeichnis bzw. Datei ein " -path datei -prune" schreiben, wobei dann noch die einzelnen "ausklammerungen" voneinander mit
einmem "-o" zu trennen sind.
Einfacher kann man sich manchen indem man die verzeichnisse in einer klammer zusammenschließt.
Beispiel:
Ich möchte die gesammte Festplatte nach ".txt" dateien durchsuchen, aber weder /mnt/server noch /cdrom oder gar /cdrecorder.
Dieser befehl würde das erledigen:
find / \( -path /mnt/server -o -path /cdrom -o -path /cdrecorder \) -prune -o -name *.txt -print
Dieser Befehl sieht zwar ein bisschen umfangreich aus ist aber wenn man ihn ein paar mal angewendet hat gut zu merken
(Die "\" müssen sein um die klammer vor der shell zu schützen - sonst gehts nicht)
Mfg
also ich glaube ich habe des Rätsels lösung gefunden:
Um ein Verzeichniss oder eine Datei auszuschließen muss man entweder für jedes Verzeichnis bzw. Datei ein " -path datei -prune" schreiben, wobei dann noch die einzelnen "ausklammerungen" voneinander mit
einmem "-o" zu trennen sind.
Einfacher kann man sich manchen indem man die verzeichnisse in einer klammer zusammenschließt.
Beispiel:
Ich möchte die gesammte Festplatte nach ".txt" dateien durchsuchen, aber weder /mnt/server noch /cdrom oder gar /cdrecorder.
Dieser befehl würde das erledigen:
find / \( -path /mnt/server -o -path /cdrom -o -path /cdrecorder \) -prune -o -name *.txt -print
Dieser Befehl sieht zwar ein bisschen umfangreich aus ist aber wenn man ihn ein paar mal angewendet hat gut zu merken
(Die "\" müssen sein um die klammer vor der shell zu schützen - sonst gehts nicht)
Mfg