Re: Wie kann man find in einem shellskript nur in Verzeichni…

Startseite
Anhänge:
Nachricht
+ (text/plain)
Nachricht löschen
Nachricht beantworten
Autor: Bernd Stroessenreuther
Datum:  
To: list
Betreff: Re: Wie kann man find in einem shellskript nur in Verzeichnissen mit Berechtigung ausführen?
Hallo Ralph,

suchen ab / finde ich auch sehr hart, ich würde das auf jeden Fall auch
auf die Verzeichnisse beschränken, wo die Papierkörbe wirklich liegen.
Das hatte Norman ja schon geschrieben, aber dafür mal ein +1 von meiner
Seite.

Um aber trotzdem die eigentliche Frage nicht komplett zu ignorieren:
Wenn Du das Script in /etc/cron.daily liegen hast, wird es als root
ausgeführt, d. h. fehlende Berechtigungen sollten da wohl in den meisten
Fällen nicht das Problem sein. Gerade die Fehlermeldungen in Bezug auf
irgendwas unter /proc deuten eher darauf hin, dass es das File einfach
schon nicht mehr gibt, wenn find versucht, darauf zuzugreifen. Die
man-page von find nennt für das Thema einen nützlichen Schalter:

-ignore_readdir_race
Normally, find will emit an error message when it fails to
stat a file. If you give this option and a
file is deleted between the time find reads the name of the file
from the directory and the time it tries
to stat the file, no error message will be issued.

Grüße aus Altdorf,
Bernd


On 19.07.2019 19:07, Ralph Lindner wrote:
> hallo LIste,
>
> mit folgendem "/etc/cron.daily/Papierkorb-leeren" lösche ich alten Müll
> aus meinen CIFS "Papierkörben":
>
> $cat Papierkorb-leeren
> #!/bin/sh
> # siehe
> https://agentur-lindner.com/2008/08/papierkorb-fur-windows-user-auch-mit-samba-server-freigabe/
> # Sämtliche Dateien in Verzeichnissen mit dem Namen ".Papierkorb" die
> älter sind als 14 Tage sollen gelöscht werden.
> # Diese Dateien sind mit Samba-Clients gelöschte Dateien (siehe smb.conf).
> # Zum Test des obigen Kommandos empfehle ich -exec durch -ok zu ersetzen
> – so muss man jedes Kommando bestätigen.
> find / -type f -wholename "*/.Papierkorb/*" -ctime +14 -exec rm "{}" \;
> find / -type f -wholename "*/Trash/*" -ctime +14 -exec rm "{}" \;
> # leere Papierkorbverzeichnisse werden ebenfalls gelöscht
> find / -depth -type d -empty -wholename "*/.Papierkorb/*" -exec rmdir
> "{}" \;
> find / -depth -type d -empty -wholename "*/Trash/*" -exec rmdir "{}" \;
>
> Das funktioniert auch ganz ordentlich. Das Problem ist nur, ich bekomme
> jedes mal eine Fehlermeldung, da auch die Verzeichnisse ohne
> Zugriffsberechtigung durchsucht werden. Hat jemand eine Idee, wie ich
> das ändern könnte? (2>/dev/null wäre die am wenigsten schöne
> Möglichkeit, krieg ich aber auch nicht hin)
>
> ...
> find: ‘/run/user/112/gvfs’: Keine Berechtigung
> find: ‘/proc/8273’: Datei oder Verzeichnis nicht gefunden
> run-parts: /etc/cron.daily/Papierkorb-leeren exited with return code 1
>
> Viele Grüße und Danke für Lösungsvorschläge
> Ralph
>

-- 
Mailing-Liste der Linux User Schwabach (LUSC) e.V.
Vor und beim Posten bitte
        => http://lusc.de/List-Netiquette <=    und
        => http://lusc.de/List-Howto      <=    beachten. Danke!