DSM 6.x und darunter Perl Script für Indexierung von neu hinzugefügten bzw. veränderten Dateien

Alle DSM Version von DSM 6.x und älter
Status
Für weitere Antworten geschlossen.

noxx-82

Benutzer
Mitglied seit
12. Jul 2011
Beiträge
84
Punkte für Reaktionen
0
Punkte
0
So, ich muss mich doch noch mal melden.

Das mounten funktioniert nach wie vor bestens. Natürlich habe ich aber bei der ganzen Aktion im Vorfeld etwas übersehen...

Wenn ich in den Mount-Folder "Musik", der ja den Inhalt von "music" wiedergibt, Daten kopiere, springt (bekanntermaßen) der Synoindex nicht an.
Ebenso beim "Bilder"- und "Filme"-Folder.

Das heißt, entweder per Konsole eine Neuindexierung nur des jeweiligen Folders anstoßen oder per DSM im Medienserver eine komplette Neuindexierung aller 3 Folder.

Allein z.B. den "music"-Folder neu zu indexieren dauert recht lange, ganz zu schweigen von einer kompletten Neuindexierung aller Medienserver-Folder.

Durch einen Thread-Beitrag hier im Forum bin ich nun auf folgende Seite und das dort zur Verfügung gestellte Perl Skript gestoßen:


http://www.naschenweng.info/2010/02/13/synology-automatic-indexing-via-synoindex


Damit soll es wohl möglich sein eine Indexierung zu starten, die allein nach neuen oder veränderten Daten im jeweiligen Folder sucht.

In Kombination mit einem cronjob könnte man dann z.B. alle 30 Minuten eine Überprüfungsindexierung laufen lassen.


Hört sich für mich ziemlich gut an. Das Skript gilt zwar offiziell nur für den "video"-Folder, lässt sich aber auf den "music"- und den "photo"-Folder umschreiben.

Mein Problem liegt nun mal wieder in der Anwendung: Kann mir eventuell jemand sagen, wohin ich das Skript kopieren muss und wie ich es prinzipiell testen kann?

Der Inhalt lautet wie folgt:


#!/usr/bin/perl

#
# Synology Media Indexer
#
# The Synology's synoindexd service will only index files if those have been copied to the media
# directory via FTP, SMB, AFP. If you move or copy media files via Telnet/SSH, the indexer is not
# aware of those, and you would have to manually reindex (which is time-consuming).
#
# This script will scan the video directory for modified files over the last two days and will then
# query the synoindex-service if the file was already indexed. If the file does not exist in the index
# database, the script will manually add it for immediate indexing.
#
# The logging component is handy, if you want to monitor when files are indexed and possibly tune your
# cronjob settings. I run the script in a cronjob every 10 minutes, which will then result in little
# overhead.
#
# I have included my most common media types in the script, but if I missed something, you are welcome
# to extend the script (and let me know what types I have missed).
#
# Usage: perl update-syno.sh /volume1/video
#
# Or add to crontab:
# */10 * * * * root perl /volume1/Extensions/scripts/update-syno.sh /volume1/video
#
# DISCLAIMER:
#
# (C) 2010 by Gerd W. Naschenweng (Gerd@Naschenweng.info / http://www.naschenweng.info)

### Logging: Adjust the path below to the base-directory where you place the script (if you don't need logging, comment out)
use lib qw(/volume1/Extensions/scripts);
use Logging::Log;

@include_files = ("ASF","AVI","DIVX","IMG","ISO","M1V","M2P","M2T", "M2TS","M2V",
"M4V","MKV","MOV","MP4","MPEG4","MPE","MPG","MPG4" ,"MTS","QT","RM","TP","TRP","TS","VOB","WMV","XVID "
);

# message of synoindex indicating that file is not indexed
# for English this is: "Failed to get MediaInfo."
# You can get the message in your locale with the following command (execute as is): synoindex -g "myfile.test" -t video
my $SYNO_ERROR_MSG = "Failed to get MediaInfo.";


## Initialise logging (comment out if you don't need it - but then also comment out the relevant sections in the code below
my $log = Logging::Log->new();
my $log = Logging::Log->new(Handle => \*F);
my $log = Logging::Log->new(File => "/var/log/media-update.log", Mode => 'append');

# pass in number the directory to scan, this will be a recursive scan
my $scan_dir = shift;

if (!$scan_dir) {
$log->entry("No scanning directory passed, using /volume1/video");
$scan_dir="/volume1/video";
}

### Search for files which have changed during the last two days (adjust if necessary to shorter/longer intervals)
my @files = `find $scan_dir -type f -mtime -2`;
my $files_indexed = 0;

foreach (@files) {
my $file = $_;
chomp($file);
my $ext = ($file =~ m/([^.]+)$/)[0];

### Check if the file-name extension is a valid media file
if (grep {lc $_ eq lc $ext} @include_files) {
my $result = `synoindex -g \"$file\" -t video`;
chomp($result);

if ($result =~ m/^$SYNO_ERROR_MSG/i) {
$log->entry("Adding file to index: $file");
my @synorc = `synoindex -a \"$file\"`;
++$files_indexed;
}
}
}

if ($files_indexed) {
$log->entry("Synology Media Indexer added $files_indexed new media file(s)");
} else {
$log->entry("Synology Media Indexer did not find any new media");
}

# Close the log-file - remove/comment out if you disable logging
$log->close;



Vielen Dank erneut für eure Hilfe.

Gruß,

Daniel
 

CoRe

Benutzer
Mitglied seit
10. Feb 2011
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hi,
steht doch oben im Header der Datei:

# Usage: perl update-syno.sh /volume1/video
#
# Or add to crontab:
# */10 * * * * root perl /volume1/Extensions/scripts/update-syno.sh /volume1/video

Du erstellst die Datei update-syno.sh unter /volume1/Extensions/scripts/ oder ein Verzeichnis deiner Wahl.
Dann kannst du diese Datei über die SSH mit "perl update-syno.sh /volume1/video" starten oder per Cronjob */10 * * * * root perl /volume1/Extensions/scripts/update-syno.sh /volume1/video starten.

Werde das Script jetzt mal testen ;)
Hab genau so ein Script gesucht.

Danke..

EDIT:
Nachdem das Logging wegen fehlendem Perl-Modul nicht funktioniert, habe ich es auskommentiert.
Dann läuft zwar das Script aber ich hänge an folgendem Problem --> http://forum.synology.com/enu/viewtopic.php?f=37&t=33408
Kenne mich leider nicht so wirklich mit Perl aus, um mit Regex Sonderzeichen zu escapen. Wird wohl daran liegen.

Habe noch ein Script gefunden:
Rich (BBCode):
#! /bin/ash

## Switches below are only for reference purpose. $1 is the one we need
fullpath=$1
nzbfile=$2
jobname=$3
reportnumber=$4
category=$5
newsgroup=$6

## change owner and usergroep
/bin/chown -R admin:users "$fullpath"

## Remove index if already exist
/usr/syno/bin/synoindex -D "$fullpath"

## Add index to targetfolder
/usr/syno/bin/synoindex -A "$fullpath"

echo "Mediaindex successfull at $fullpath"

Aber da kommt der Fehler:
Rich (BBCode):
: not foundblic/update-syno-media.sh: line 2:
: not foundblic/update-syno-media.sh: line 10:
: No such file or directoryDR\ \]\ Aufnahmen/
: not foundblic/update-syno-media.sh: line 13:
: not foundblic/update-syno-media.sh: line 16:
: not foundblic/update-syno-media.sh: line 19:

Keine Ahnung..

Brauche unbedingt ein Script oder ein Befehl, mit dem ich einen Ordner innerhalb von Video indexieren kann.
Dort werden unregelmässig Videos von einem Script abgelegt.
Leider sind die dann nicht über DLNA zu sehen, bevor ich einen kompletten ReIndex mit synoindex -r video starte.

Jemand eine Idee?

Gruß
CoRe
 
Zuletzt bearbeitet:
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