find nicht auf Unterverzeichnisse anwenden, möglich?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

find nicht auf Unterverzeichnisse anwenden, möglich?

Beitrag von Duff » 27.09.2007 12:12:05

Hallo,

ich suche bestimtme Dateien mit find und bearbeite dann diese. Allerdings muss ich noch verschiedene Kriterien wie z.B. die ctime angeben, damit nicht auch noch Dateien von Unterverzeichnissen gefunden werden.

Gibt es auch eine Möglichkeit, mit der ich find sagen kann, dass er nur z.B. /home/daniel/test durchsuchen soll und nicht noch die Unterverzeichnisse, die dort sind?

Habe in der manpage zu find nichts passendes finden können.

Danke.
Oh, yeah!

comes
Beiträge: 2702
Registriert: 11.03.2005 07:33:30
Wohnort: /dev/null
Kontaktdaten:

Beitrag von comes » 27.09.2007 12:14:47

-maxdepth levels
Descend at most levels (a non-negative integer) levels of direc-
tories below the command line arguments. `-maxdepth 0' means
only apply the tests and actions to the command line arguments.
grüße, comes

Faschismus ist keine Meinung, sondern ein Verbrechen!
http://sourcewars.de

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 27.09.2007 13:14:36

Ok, danke.

War mein Fehler, es handelt sich hier um das find unter HP-UX. Dort gibt es den Parameter -maxdepth 0 leider nicht.

Trotzdem Danke.
Oh, yeah!

comes
Beiträge: 2702
Registriert: 11.03.2005 07:33:30
Wohnort: /dev/null
Kontaktdaten:

Beitrag von comes » 27.09.2007 13:16:35

grüße, comes

Faschismus ist keine Meinung, sondern ein Verbrechen!
http://sourcewars.de

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 27.09.2007 13:33:05

Sorry, aber irgendwie verstehe ich das falsch oder ich mache was falsch.

Habe folgendes probiert:

Code: Alles auswählen

find path-name-list 0 /pfad/ -type f  -exec ls -l {} \;
Jedoch wird auch ein Unterverzeichnis genommen (/pafd/unterverzeichnis).
Oh, yeah!

Benutzeravatar
blackstream
Beiträge: 143
Registriert: 04.12.2003 21:05:09
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Neuss

Beitrag von blackstream » 27.09.2007 14:43:40

Probier mal

Code: Alles auswählen

find /pfad -depth 0 -type f  -exec ls -l {} \; 
path-name-list in der Manpage steht einfach nur für den Pfad (bzw. die Pfade), in dem (bzw. denen) gesucht wird.
»Wenn Sie neu sind bei Unix, sollten Sie sich vielleicht ein paar Bücher kaufen und lesen.«
(gefunden im Debian-Installationshandbuch)

Benutzeravatar
blackstream
Beiträge: 143
Registriert: 04.12.2003 21:05:09
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Neuss

Beitrag von blackstream » 27.09.2007 14:52:30

Sorry, habe die Manpage nicht ordentlich gelesen. -depth bekommt gar keine Zahl angegeben und bewirkt etwas anders, als ich es zuerst dachte. Vermutlich gibt es dann doch keine Möglichkeit.
»Wenn Sie neu sind bei Unix, sollten Sie sich vielleicht ein paar Bücher kaufen und lesen.«
(gefunden im Debian-Installationshandbuch)

Benutzeravatar
MSfree
Beiträge: 11763
Registriert: 25.09.2007 19:59:30

Beitrag von MSfree » 27.09.2007 15:07:34

blackstream hat geschrieben:Sorry, habe die Manpage nicht ordentlich gelesen.
Hast du scheinbar immer noch nocht ;)
sonst wäre dir der Parameter -maxdepth Ebenen ins Auge gesprungen.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 27.09.2007 15:11:42

MSfree hat geschrieben:
blackstream hat geschrieben:Sorry, habe die Manpage nicht ordentlich gelesen.
Hast du scheinbar immer noch nocht ;)
sonst wäre dir der Parameter -maxdepth Ebenen ins Auge gesprungen.
Ja, aber nicht unter HP-UX :-)
Oh, yeah!

Benutzeravatar
blackstream
Beiträge: 143
Registriert: 04.12.2003 21:05:09
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Neuss

Beitrag von blackstream » 27.09.2007 16:38:56

Vielleicht gibt es doch noch eine Möglichkeit (mangels HP-UX allerdings ungetestet :) ):

Code: Alles auswählen

find /pfad ! -path /pfad/*/* -type f -exec ls -l {} \;
»Wenn Sie neu sind bei Unix, sollten Sie sich vielleicht ein paar Bücher kaufen und lesen.«
(gefunden im Debian-Installationshandbuch)

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 27.09.2007 19:42:12

Werde es morgen mal ausprobieren.
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 28.09.2007 10:25:38

Mmh...

also irgendwie fehlt dem was:

Code: Alles auswählen

daniel@debian:/home/daniel> find /home/daniel ! -path /home/daniel/*/* -type f -exec ls -l {} \;
find: missing conjunction

Wenn ich das hier eingebe, wird zwar das Kommando abgesetzt, aber es werden auch wieder Unterverzeichnisse angezeigt:

Code: Alles auswählen

daniel@debian:/home/daniel> find /home/daniel ! -path /home/daniel -type f -exec ls -l {} \;
Mache ich nur * nach dem -path /home/daniel/* kommt die obere Fehlermeldung.
Oh, yeah!

Benutzeravatar
blackstream
Beiträge: 143
Registriert: 04.12.2003 21:05:09
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Neuss

Beitrag von blackstream » 02.10.2007 19:53:22

:? irgendwie steht find mit mir auf Kriegsfuß ...

... aber nach einem Studium der findutils-Doku bin ich, glaube ich, etwas schlauer, und denke nun, dass der Ausdruck

Code: Alles auswählen

find /pfad/* -type d -prune -o -exec ls -l {} \; 
das ist, was Du suchst. Bei Debian funktioniert's zumindest ...
»Wenn Sie neu sind bei Unix, sollten Sie sich vielleicht ein paar Bücher kaufen und lesen.«
(gefunden im Debian-Installationshandbuch)

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 02.10.2007 20:10:33

Jo, danke.

So funktioniert es, und um es im aktuellen Verzeichnis auf alle Dateien anwenden zu können, funktioniert es so:

Code: Alles auswählen

find . -type d -prune -a -type f -o -exec ls -l {} \;
Oh, yeah!

Benutzeravatar
blackstream
Beiträge: 143
Registriert: 04.12.2003 21:05:09
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Neuss

Beitrag von blackstream » 03.10.2007 10:13:29

Nee, das funktioniert doch nicht so, wie es soll. Du siehst es, wenn Du aus dem ls -l ein ls -ld machst.

Eben unter Solaris (wo der find-Befehl keinen Parameter -path wie z.B. HP-UX kennt), habe ich mit folgendem Befehl das erhhoffte Ergebnis erzielt:

Code: Alles auswählen

find . \( -name '.?*' -prune -o -name '*' -prune \) -a -type d -o -type f -exec ls -ld {} \; 
»Wenn Sie neu sind bei Unix, sollten Sie sich vielleicht ein paar Bücher kaufen und lesen.«
(gefunden im Debian-Installationshandbuch)

Antworten