ubuntuusers.de

find: Verzeichnisse und Dateien ausschliessen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

pinguino

Avatar von pinguino

Anmeldungsdatum:
6. Februar 2007

Beiträge: 732

Wohnort: BW

Hallo,

ich versuche seit einigen Stunden folgendes hinzukriegen: Ich moechte unter $HOME alle Dateien (inkl. Verz. und Dateien) außer die Dateien, die mit einem Punkt beginnen, suchen. Verzeichnisse, die mit einem Punkt beginnen, dürfen nicht berücksichtigt werden. Außerdem möchte ich nur die Dateien aufgelistet haben, in den der Inhalt in der letzten 10 Minuten geändert worden ist.

find $HOME -name '*' -a -mmin -40 ! \( -name '.*' -path '$HOME/.*' \)

Das habe ich versucht aber es klappt nicht. Ich habe andere Varianten versucht aber ohne Erfolg. Danke im voraus.

pinguino

(Themenstarter)
Avatar von pinguino

Anmeldungsdatum:
6. Februar 2007

Beiträge: 732

Wohnort: BW

So, ich habs:

Ungültiges Makro

Dieses Makro ist nicht verfügbar

find /der/Pfad -name "*" -mmin +1 -mmin -11 \( -path "/der/Pfad/.*" -prune -o -print \)

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Nach '*' sucht find ohnehin - d.h. es genügt auszuschließen, '.*' (und -print ist auch, was ohnehin getan wird). In den letzten 10 Minuten umfaßt auch die letzte Minute, also müßte es so gehen:

find /der/Pfad -not -name ".*" -mmin -11 

pinguino

(Themenstarter)
Avatar von pinguino

Anmeldungsdatum:
6. Februar 2007

Beiträge: 732

Wohnort: BW

Danke für die Antwort. Leider funktioniert die vorgeschlagene Variante nicht.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Inwiefern funktioniert sie nicht? Zeigt sie Dateien, die mit . beginnen? Zeigt sie Dateien, die älter als 10 Min. sind? Zeigt sie manche Dateien nicht?

pinguino

(Themenstarter)
Avatar von pinguino

Anmeldungsdatum:
6. Februar 2007

Beiträge: 732

Wohnort: BW

Es berücksichtigt alle Verzeichnisse, die mit einem "." beginnen und das sollte nicht sein. Du kannst selber im Terminal auf $HOME testen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

ah, ich verstehe!

wian777

Anmeldungsdatum:
15. Februar 2023

Beiträge: Zähle...

Etwas tricky, sollte aber die Anforderung erfüllen. Alles ohne dot '.' am Beginn, ob Datei oder Verzeichnis.

1
for k in `find $PWD -type d ! -name ".*"`; do find $k -maxdepth 1 ! -name ".*" -mmin -11; done|uniq

Systemvariable $PWD durchsucht das aktuelles Verzeichnis. Funktioniert natürlich auch mit $HOME.

Wenn man die Datei oder Verzeichnisnahmen noch genauer darstellen möchte genügt ein zusätzliches -ls. Das Verzeichnis $PWD ist halt dabei:

1
for k in `find $PWD -type d ! -name ".*"`; do find $k -maxdepth 1 ! -name ".*" -mmin -11 -ls; done|uniq

Und jetzt noch ohne Verzeichnisnamen, nur Dateien (hier im $HOME):

1
for k in `find $HOME -type d ! -name ".*"`; do find $k -maxdepth 1 -type f ! -name ".*" -mmin -11 -ls; done

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

Willkommen im Forum!

Oh, da hast Du ja ein altes Schätzchen ausgegraben! Ich würde das so machen:

1
find "$HOME" \( -type d -name '.*' -prune \) -o \( -type f \! -name '.*' -mmin -11 -print \)

Man kann die Dateien auch gleich verarbeiten:

1
find "$HOME" \( -type d -name '.*' -prune \) -o \( -type f \! -name '.*' -mmin -11 -exec sh -c 'for f; do echo ">> $f"; done' -- {} + \)
Antworten |