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

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

hier auch mein Senf dazu:

Wie schon erwähnt, ist die Suche über / unschön. Gleich mehrere Suchen
aber über / zu fahren - sehr unschön, vor allem langsam.

Vielleicht verwendest Du einfach das eingebaute "oder":

find /somwhere \( -name 'foo' -o -name 'bar' -o -name 'baz' \) -exec
mycommand {} \;
sucht in somewhere nach foo, bar und baz und führt das Kommando
mycommand aus. Bitte Klammern nicht vergessen, da sich daß exec immer
auf das letzte Ergebnis bezieht.

Außerdem: was ist gegen 2>/dev/null einzuwenden? Das unterdrückt die
Fehlerausgabe und gehört natürlich ans Ende des find, also hinter das rm
{} \;
find /somehwere -name 'foo' -exec rm {} \; 2>/dev/null

Gruß
Olli

Am 19.07.19 um 21:22 schrieb Bernd Stroessenreuther:
> 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!