Medienindizierung triggern

  • 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.

Hoffy

Benutzer
Registriert
16. Jan. 2014
Beiträge
241
Reaktionspunkte
1
Punkte
24
Hi,

ich habe festgestellt, dass die Medienindizierung neuer Dateien nicht ausgelöst wird wenn diese über ssh als root erstellt werden.

Hintergrund:
Ich nutze Unison um meine iTunes Musik vom MacBook auf das NAS zu spiegeln. Das klappt soweit auch wunderbar und automatisiert. Unison loggt sich als root per ssh ein und überträgt die Dateien. Berechtigungen passen auch. Die SynoACL`s werden vererbt, somit sind die Dateien normal zugänglich so wie es sein sollte.
Nur in der AudioStation tauchen sie erst auf, wenn auf "normalem" Weg (FileStation,SMB,SFTP usw.) eine Datei hinzugefügt/geändert wird. Daher meine Vermutung, dass die Indizierung nicht getriggert wird.

Ich suche deshalb eine Möglichkeit diese Indizierung automatisch (am liebsten gleich mit im Unison Shell Skript) mit auszulösen.

Der Re-index Button in der Systemsteuerung stellt keine Alternative dar, da dieser offensichtlich alle Dateien nochmals untersucht, was ja sonst nicht der Fall ist.

Vielen Dank im Voraus
Grüße
 
Nur mal als Gedanke - was passiert, wenn Du den Login der App nicht über 'root' laufen läßt, sondern mit 'admin'? Können dann die Daten ebenfalls kopiert werden und werden dann eventuell automatisch indiziert?
 
Ich suche deshalb eine Möglichkeit diese Indizierung automatisch (am liebsten gleich mit im Unison Shell Skript) mit auszulösen.

In einem Shell-Skript kannst du dafür den Befehl 'synoindex' verwenden. Eine Hilfe dazu erhälst du, wenn du den Befehl ohne Parameter eingibst.
 
Vielen Dank für eure Antworten!

@Frogman:
der admin-Account ist bei mir deaktiviert. Wenn ich meinem anderen administrator-User ssh-Zugang gebe ist ihm der "chown"-Befehl nicht erlaubt, was das Ausführen von unison für mich unbrauchbar macht.
Ich habe aber mit dem Account mal einen "touch Dummy.mp3" Befehl abgesetzt. Ich weiß nicht ob das wirklich vergleichbar ist mit dem Übertragen der Musik, aber jedenfalls wird damit die Indizierung auch nicht angestoßen.

Allein aus Sicherheitsgründen müsste ich aber auf den administrator-User umsteigen. Weißt du wie ich das mit dem chown in den Griff bekomme?

@xabano:
Danke, genau danach habe ich gesucht!
Ich habe folgenden Befehl ausprobiert:
Rich (BBCode):
synoindex -R share:02_Musik
02_Musik ist der betroffene Ordner. Bei diesem Befehl wird aber auch der gesamte Ordner gecheckt. In der DSM-Oberfläche sieht es sogar so aus als hätte ich den "Neu indizieren"-Button in der Systemsteuerung gedrückt. Der Prozess ist mehr als 10min beschäftigt, das ist ja nicht der Fall wenn ich über die File Station eine einzige mp3 hinzufüge?
Ist das unvermeidbar oder benutze ich den Befehl falsch?

Grüße
 
Ich brauche den Befehl um Einträge aus dem Index zu löschen, das mache ich mit dem Parameter -d.
Mit Unison kenne ich mich nicht aus. Ist es damit nicht möglich, eine Liste der betroffenen Dateien zu erhalten? Dann könnte der Parameter -a verwendet werden, um die einzelnen Dateien im Index zu ergänzen.

Gemäss Hilfe-Text erfolgt mit -R eine Reindexierung des gesamten angegebenen Ordners.
 
Scheinbar ist das mit Unison nicht möglich.
Ich scheitere gerade daran das mit "find" umzusetzen. Soweit bin ich bisher:
Rich (BBCode):
find /volume2/02_Musik/ -mtime -1 -exec synoindex -a {} \;

Leider spuckt er mir da lauter Dateien aus den @eaDir Verzeichnissen mit aus, aber wenn ich "-iname eaDir" ergänze um das zu verhindern gibt es gar keine Ausgabe mehr. Verstehe ich nicht ganz.

Grüße

EDIT: Okay hat sich erledigt. mit "-user <USERNAME>" kriege ich die Dateien auch ausgeschlossen. Würde mich aber trotzdem interessieren warum der "iname"-Parameter nicht so funktioniert wie ich mir das vorstelle
 
Zuletzt bearbeitet:
Mit unison kann ein Log-File generiert werden. Wie einfach der Inhalt für die Indexierung verwendet werden kann weiss ich aber nicht.

Bei find kann mit dem Parameter -prune ein Ordner von der Suche ausgeschlossen werden:

Rich (BBCode):
find /volume2/02_Musik/ -path /volume2/02_Musik/@eaDir -prune -o -mtime -1 -type f -print

Der Parameter -iname macht eigentlich nichts anderes, als dass die Gross-/Kleinschreibung in der Namensuche nicht beachtet wird (im Gegensatz zu -name).
 
Vielen Dank für deine Hilfe!

Das mit find war mein Fehler, hab den iname-Parameter total missverstanden.

Ich hab das Unison-Log mal in Angriff genommen, da das die präzisere Lösung wäre (mit der Änderungszeit von "find" könnte mir mal was durch die Lappen gehen).
Es war nicht ganz so einfach, aber ich hab jetzt schon folgendes Format hingekriegt:
Rich (BBCode):
/volume2/02_Musik/INTERPRET NAME/ALBUM NAME
/volume2/02_Musik/INTERPRET NAME/ALBUM NAME/TITEL NAME.mp3
...

Es fehlen mir nur noch zwei Schritte:

1: Ich muss es in eine Formatierung bringen die als shell input erlaubt ist, sprich einen Backslash vor jedem Leer- und Sonderzeichen. Also
Rich (BBCode):
/volume2/02_Musik/INTERPRET\ NAME/ALBUM\ NAME
/volume2/02_Musik/INTERPRET\ NAME/ALBUM\ NAME/TITEL\ NAME.mp3
...

Im Netz hab ich folgendes gefunden:
printf "%q" "<INPUT>"

%q - causes printf to output the corresponding argument in a format that can be reused as shell input
Auf dem Mac funktioniert das, aber die DS kennt %q nicht :(

2: Es kommen sowohl Ordner als auch Dateien bunt gemixt im Unison-Log vor, das lässt sich auch nicht vermeiden. Diese müssen ja voneinander getrennt an synoindex gegeben werden.
Das lässt sich sicherlich mit nem geschickten "grep" umsetzen, aber Punkt 1 bereitet mir Kopfzerbrechen

Grüße
 
Ohne das getestet zu haben:

Zu 1:
Es dürfte wohl einfacher sein den gesamten Pfad zu quoten. Dann könnte man auf das Schützen von Leer- und Sonderzeichen verzichten.

Zu 2:
Um zu verhindern, dass ganze Verzeichnisse indiziert werden würde ich vor dem Absetzen des Index-Befehles jeweils prüfen, ob der Pfad zu einer Datei führt und nur dann indexieren.
 
Hi,

Zu 1:
danke für den Tipp mit den Quotes, da hab ich zu kompliziert gedacht :o

Zu 2:
Es ging mir eigentlich darum, dass synoindex ja zwischen "add a file" und "add a dir" unterscheidet, und ich diese deswegen auch voneinander trennen muss um synoindex mit dem richtigen Parameter darauf auszuführen. Aber ich hab gerade festgestellt, dass er keinen Fehler ausspuckt wenn ich beim "add a dir" Parameter eine Datei angebe. Das schaue ich mir nochmal genauer an.

Jedenfalls hab ich jetzt mit deiner Hilfe ein funktionierendes Ergebnis zustande gekriegt :)
Folgend skizziere ich mal den Aufbau des Logs und meinen Befehl dazu. Über Verbesserungsvorschläge würde ich mich freuen

Das Log sieht ungefähr so aus:
Rich (BBCode):
UNISON 2.40.69 started propagating changes at 21:16:52.91 on 12 Jan 2015
[BGN] Copying <INTERPRET>/<ALBUM>/01 <Titel>.mp3 from /<LOCAL>/<PATH>/Music to //syno//volume2/02_Musik
[BGN] Copying <INTERPRET>/<ALBUM> from /<LOCAL>/<PATH>/Music to //syno//volume2/02_Musik
[BGN] Copying properties for Playlists/2014.m3u from /<LOCAL>/<PATH>/Music to //syno//volume2/02_Musik
...
[END] Copying <INTERPRET>/<ALBUM>/01 <Titel>.mp3
[END] Copying <INTERPRET>/<ALBUM>
[END] Copying properties for Playlists/2014.m3u
...
UNISON 2.40.69 finished propagating changes at 21:18:50 on 12 Jan 2015
Synchronization complete at 21:18:53  (xx items transferred, 0 skipped, 0 failed)

Anmerkungen:
- Je nachdem, ob nur eine Datei oder ein ganzer Ordner oder nur eine Datei lokal neu erstellt wurde, steht im Log auch nur der Ordner (auch wenn da Dateien drin sind) oder die Datei, daher mein Gedanke mit der Unterscheidung
- Bei neuen Dateien steht nur "Copying", bei geänderten properties "Copying properties" -> logisch :D
- Als Dateien kommen vor: m4a, mp3, m3u

Vorausgesetzt ich muss wirklich nicht zwischen Datei und Ordner bei synoindex trennen, sieht mein Befehl folgendermaßen aus:
Rich (BBCode):
cat /<LOCAL>/<PATH>/Unison.log | ssh root@syno 'cat | grep "END.*Copying" | sed -e "s:\[END\] Copying properties for :/volume2/02_Musik/:" -e "s:\[END\] Copying :/volume2/02_Musik/:" | synoindex -A "$1"'
 
Hi,

ich hab mich schon wieder vertan, es funktioniert doch noch nicht :(

zum einen hab ich festgestellt, dass synoindex zwar keine Fehlermeldung ausspuckt wenn ich beim "Datei hinzufügen"-Parameter einen Ordner angebe, es aber auch nichts passiert, also muss ich doch Ordner von Dateien trennen und extra synoindex zuführen.

Und das zuführen ist auch mein zweites Problem

@xabano: Könntest du vl mal die Syntax posten mit der du synoindex benutzt?

Ich kriege die Verkettung der Befehle nicht hin. Ich habe (in meinem jugendlichen Leichtsinn) übertragen von
Rich (BBCode):
echo "/PATH" | cat $1
auf
Rich (BBCode):
echo "/PATH" | synoindex -A $1
aber das funktioniert nicht. Dann kommt noch hinzu, dass ich die Sachen gequotet an synoindex übergeben muss. Bei
Rich (BBCode):
echo "/PATH" | synoindex -A "\$1"
echo "/PATH" | synoindex -A "$1"
spuckt synoindex zwar keine Fehlermeldung mehr aus wie beim Ersten, aber es funktioniert auch nicht.

Ich kenne mich mit diesen Feinheiten auch nicht aus muss ich zugeben, deswegen würde ich mich über Hilfe freuen

Grüße
 
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