Nach Firmware update Problem mit find Befehl in einem sh script

Status
Für weitere Antworten geschlossen.

_Henning_

Benutzer
Mitglied seit
17. Feb 2013
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich benutze ein sh script um Dateien in einem Verzeichniss zu finden. Der Befehl den ich dafür nutze ist find.
Nach dem update der Firmware auf 4.2-3211 erhalte ich jedoch bei Verwendung des Befehls ein "Permission Denied".
Das Script lief vorher ohne Probleme. Eine Analyse von Rechten erbrachte bisher kein Erfolg.
Der relevante Ausschnitt aus dem Script lautet wie folgt:

Rich (BBCode):
#!/bin/sh
FILES=find "/volume1/Log/" -xdev -type f -name "*2013-07*.DB" -print

Der Aufruf des Scripts erfolgt durch:
sh /volume1/Backup/Device_Settings/Synology/Scripts/Analyse_LINK

Ergebniss der Aufrufs:
Rich (BBCode):
DiskStation> sh /volume1/Backup/Device_Settings/Synology/Scripts/Analyse_LINK
/volume1/Backup/Device_Settings/Synology/Scripts/Analyse_LINK: line 24: /volume1/Log/: Permission denied
DiskStation>

Ein manuelles Aufrufen des find Befehls auf der Shell liefert das gewünschte Ergebniss - es werden alle Dateien mit der Endung".DB" gefunden wo ein Teil des Dateinamens aus "2013-07" besteht:
Rich (BBCode):
DiskStation> find "/volume1/Log/" -xdev -type f -name "*2013-07*.DB" -print
/volume1/Log/2013-06-27_2013-07-27.DB
/volume1/Log/2013-07-27_2013-08-26.DB
DiskStation>
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.178
Punkte für Reaktionen
65
Punkte
68
Der find Befehl sollte in Backticks oder $() eingeschlossen werden
Rich (BBCode):
FILES=$(find "/volume1/Log/" -xdev -type f -name "*2013-07*.DB" -print)
 

_Henning_

Benutzer
Mitglied seit
17. Feb 2013
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hi Tommi,

danke für die Hilfe! Jetzt funktioniert es wieder!
Kannst du mir den Hintergrund erklären?

Gruß
Henning
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.178
Punkte für Reaktionen
65
Punkte
68
Nun, ich kann mir nicht vorstellen, dass dieses Script genauso wie geschrieben vor dem Update schon einmal funktioniert hat. Du möchtest die Ausgabe eines Betriebssystembefehls(find) in eine Variable haben. Dazu muss man den Befehl auch incl. allen Parametern ausführen, um die Ausgabe zu bekommen. Genau das machen die Backticks bzw. das $(). In der Ursprungsversion wird nur der Text "find" der Variable FILES zugewiesen und dann versucht, den Parameter /volume1/Logs auszuführen, weil der als nächstes nach dem Leerzeichen steht, aber nicht mehr zur Variablenzuweisung gehört. Das geht natürlich nicht, denn ein Directory kann man nicht ausführen.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Das geht natürlich nicht, denn ein Directory kann man nicht ausführen.
wenn man es genau nimmt dann eigentlich schon ;-) Nimm deinem User mal die Ausführrechte von einem Verzeichnis weg und versuch nachher den Inhalt des Verzeichnisses aufzulisten ;-)
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.178
Punkte für Reaktionen
65
Punkte
68
Warum der Wechsel in ein Verzeichnis "Execute" benötigt, ist wohl eines der am besten gehüteten Unix-Mysterien. Wahrscheinlich war schlicht kein Bit mehr frei.
 
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 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!