Ich mag Busybox ash find -exec nicht!

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Steini

Benutzer
Registriert
22. März 2010
Beiträge
423
Reaktionspunkte
1
Punkte
0
So, habt ihr Ostern gut über die Runden gebracht und alle versteckten Eier/Süßigkeiten/Leckerlis/whatever aufgespürt? Ich hab' hier noch eine Herausforderung für euch, der ich irgendwie nicht beikomme... Und zwar möchte ich die von Macs angelegten "Desktop Services Store"-Dateien von meinem NAS verbannen. Meinem eigenen Rechner habe ich das bereits abgewöhnt via...

Rich (BBCode):
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
Aber dennoch tauchen diese lästigen Dateien auf, weil andere User eben nicht ihre Macs entsprechend konfiguriert haben und ich jetzt hinterherräumen muss. Deswegen wollte ich via Konsole die bereits angelegten Dateien löschen:

Rich (BBCode):
find /volume1 -name ".DS_*" -exec rm -r \"{}\" \;
Pustekuchen! Da wird nix gelöscht. Niente. Nada. Schreibe ich hingegen den Dateinamen aus, funktioniert's:

Rich (BBCode):
find /volume1 -name ".DS_Store" -exec rm -r \"{}\" \;
Und jetzt kommt ihr:
  1. Wieso kann ich das zweite find in der Konsole erfolgreich ausführen, aber nicht via Cron?
  2. Könnte mir bitte jemand verraten, wieso der Stern als Platzhalter nicht akzeptiert wird?
 
Bei mir geht das:

Rich (BBCode):
Synology> /usr/bin/find /volume1 -name ".DS_*" -exec echo \"{}\" \;
/volume1/downloads/.DS_Store
...

Hab statt des rm -r gerade nur den echo verwendet, um den Dateinamen anzeigen zu lassen ...

Itari
 
War ja klar, dass das Problem am DAU vor dem NAS lag... :confused:

Ich habe das Sternchen ständig mit diesem Befehl genutzt:

Rich (BBCode):
find /volume1 -name ".ds_*" -exec rm -r \"{}\" \;
Getestet habe ich es allerdings ausgeschrieben mit ".DS_Store". Baaaaahhh!!!!

Das wirft eine weitere Frage: Welchen Schalter nutze ich, damit find beim Suchen keine Unterscheidung zwischen Groß- und Kleinschreibung macht? Weder -i noch -iname bringen mich voran.

Und die erste Frage ist noch ungeklärt:

Rich (BBCode):
find /volume1 -name ".DS_*" -exec rm -r \"{}\" \;
...im Crontab zeigt keine Wirkung.
 
Installiere dir per IPKG die findutils. Damit geht dann auch der -iname.

In der crontab würde ich zunächst komplette Pfade verwenden:

Rich (BBCode):
/opt/bin/find /volume1 -iname ".DS_*" -exec /bin/rm -r \"{}\" \;

Itari
 
In der crontab alle parameter (tag monat stunde etc) per TAB getrennt? Das ist zumindest der Lieblingsfehler. Der cron auf der DS ist ziemlich empfindlich was die Syntax angeht.

Und alle Kommandos mit vollem Pfad aufrufen. Der PATH ist nicht unbedingt derselbe wie bei der Shell.
 
Also das folgende funzt bei mir mit ipkg findutils sauber
Code:
find /path | grep ".DS_*" | xargs -n 1 rm
 
Also das folgende funzt bei mir mit ipkg findutils sauber [...]
Oh, du mein Held!!! :D Jetzt klappt's auf der Shell und im Cron perfekt:

Rich (BBCode):
/usr/bin/find /volume1 | grep -i ".ds_*" | xargs -n 1 rm

Noch eine Frage, die aber nicht direkt mit dem Problem zu tun hat: Wenn ich dem Cron sagen möchte, dass er bitte alle fünf Minuten einen Job anstößt, warum funktioniert das nicht mit "*/5"?
 
Mir ist noch etwas potentiell gefährliches aufgefallen! Wenn das Suchmuster nicht zutrifft, dann wird der Inhalt der aktuellen Verzeichnisses aufgelistet!!! Dann wird also wohl das aktuelle Verzeichnis gelöscht!!
 
Nein, dem ist nicht so. Zumindest nicht nach meinen Testläufen.
 
Verwende den Code NUR wenn du zuvor eine Prüfung auf diese Files gemacht hast
Code:
#!/bin/sh

if test -n $(/usr/bin/find /volume1 | grep -i ".ds_*"); then
 /usr/bin/find /volume1 | grep -i ".ds_*" | xargs -n 1 rm
fi
 
Wie gesagt: Nach Testläufen konnte ich nicht feststellen, dass mir irgendwas im /volume1 gelöscht wurde. Geprüft habe ich den Aufruf vorher mit:

Rich (BBCode):
/usr/bin/find /volume1 | grep -i ".ds_*" | xargs -n 1 ls -la
 
Nein, dem ist nicht so. Zumindest nicht nach meinen Testläufen.
Stimmt du hast recht. rm verlangt immer nach einem filenamen und grep findet ja nichts. Wenn du aber ls statt rm verwendest dann wird dir trotzdem der gesamte Verzeichisinhalt angezeigt, drum habe ich befürchtet, dass rm auch alles wegputzen hätte.
Eine Fehlermeldung seitens rm solltest du aber kriegen wen du den Code auf ein Verzeichnis loslässt, das keine solchen store Dateien hat.
**edit**
Ich würde trotzdem ein kleines if test machen bevor du den Befehl anwirfst
**edit**
 
[...] Eine Fehlermeldung seitens rm solltest du aber kriegen wen du den Code auf ein Verzeichnis loslässt, das keine solchen store Dateien hat. [...]
Wo sollte die stehen? In den Logs? Wenn ich den Befehl in der Konsole auf ein Verzeichnis ohne DSS-Dateien absetze, bekomme ich keinerlei Feedback.

[...] Ich würde trotzdem ein kleines if test machen bevor du den Befehl anwirfst [...]
Ja, da hast du Recht: Sicher ist sicher!
 
Wo sollte die stehen? In den Logs? Wenn ich den Befehl in der Konsole auf ein Verzeichnis ohne DSS-Dateien absetze, bekomme ich keinerlei Feedback.
Direkt auf der Konsole ergibt keinen Fehler, wenn solche Dateien nicht vorkommen??? Bei mir kommt
/usr/bin/find /tmp/test | grep -i ".dS_*" | xargs -n 1 rm
rm: missing operand
 
Liegt am AdminTool. Hatte vergessen die Ausgabe zu aktivieren mittels 2>&1. Jetzt erhalte ich beim Absetzen von...

Rich (BBCode):
/usr/bin/find /tmp/test | grep -i ".dS_*" | xargs -n 1 rm 2>&1
...diesen Fehler:

Rich (BBCode):
Usage: rm [OPTION]... FILE...
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat