Neue Filme automatisch ab Datum auf Ext. USB schieben (Paket oder Shell Skript?!?)

  • 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.
Okay ich probiere es mal mit dem Log, hab auch schon wieder gelesen das ">>" dafür sorgen das der Report immer wieder an das bestehende Textfile rangehangen wird.
-> Das sollte es eigentlich sein von der Funktion, ich teste es mal.

Aber fehlt da nicht noch was wie ls oder ist das nach einem ">", oder ">>" nicht nötig? Hab gerade auf dieser Seite gelesen.

Ich teste mal den Punkt 1 und melde mich wieder, danke!

Zu Punkt 2,
Ich ändere die Quellordner nicht und weiß ja jetzt auch zukünftig, dass wenn es was kopieren soll, dass die Ordner vorhanden sein müssen.
Zur "Not" muss ich die Ordner per Hand erstellen, wenn ich mal einen Ordner ändere. Die Funktion würde das Skript nur sehr universell für alle machen, aber zum jetzigen Zeitpunkt würden mich die Schleifen mit Prüfung wohl noch überfordern, lass uns erstmal so weiter machen :-).

Danke mein Lieber :-)

Seger
 
Ein ls listet nur den Verzeichnisinhalt auf.
Das was du aber in der Datei haben willst ist ja das Ergebnis von find bzw. welche Dateien cp verarbeitet.
Eigentlich müsste stdout schon via > geschrieben werden.
2> ist stderr
Aber vielleicht hab ich auch grad was übersehen, und es gibt an der Stelle keinen output, auf dem Weg ins Bett. Schaue morgen nochmal.

https://wiki.ubuntuusers.de/Shell/Umleitungen/

> sorgt für eine Umleitung der Ausgaben. Ob neue Datei oder angefügt mit >> ist deine Sache.
 
Ja, wir machen morgen weiter :-), vielleicht hab ich jetzt auch was übersehen, hab mich extra auf der Seite: https://wiki.ubuntuusers.de/Shell/Umleitungen/#Umleiten-der-Ausgabe-mit eingelesen ;-)

Also hab gerade einen kleinen Test gemacht mit 2> ... hab den Oberordner mal nicht erstellt, dann packt er den Fehler (2> ist stderr) sofort in die log.txt datei rein, also ein Rechtefehler oder Schreibfehler besteht nicht.
Sobald aber das Skript sauber durchläuft wird zwar ein Log.txt erstellt, aber es bleibt leer. Vielleicht gibt es an der Stelle wirklich kein output.

Ich poste nochmal unseren letzten Stand, morgen kann ich erst abends wieder testen, aber ich habe keine Eile solange du noch entspannt bist.

Rich (BBCode):
#!/bin/bash
cd "/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)" && find -type f -newermt "2018-02-22" -exec cp -u --parents "{}" "/volumeUSB1/usbshare/- Filme x265 (Neu Test)/" 2> "/volumeUSB1/usbshare/Log.txt" \;

Gute Nacht und bis morgen.

Viele Grüße
Seger
 
Hey mein Lieber,

ich glaube ich habe es selbst herausgefunden es fehlte die Option:

-v oder --verbose Durchgeführte Tätigkeiten "erklären" / anzeigen

Jetzt sieht es so aus:
Rich (BBCode):
#!/bin/bash
cd "/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)" && find -type f -newermt "2018-02-22" -exec cp -uv --parents "{}" "/volumeUSB1/usbshare/- Filme x265 (Neu Test)/" 2>> "/volumeUSB1/usbshare/Fehler.txt" 1>> "/volumeUSB1/usbshare/Log.txt" \;

Offtopic:
Anbei sende ich dir mal das entstandene Testlog:
Rich (BBCode):
./Jumper (2008) -> /volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)
'./Jumper (2008)/Jumper (2008).nfo' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).nfo'
'./Jumper (2008)/Jumper (2008).mkv' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).mkv'
./Jumper (2008)/@eaDir -> /volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/@eaDir
'./Jumper (2008)/@eaDir/Jumper (2008).mkv@SynoEAStream' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/@eaDir/Jumper (2008).mkv@SynoEAStream'
'./Jumper (2008)/clearart.png' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/clearart.png'
'./Jumper (2008)/banner.jpg' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/banner.jpg'
'./Jumper (2008)/logo.png' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/logo.png'

Weißt du ob es schon eine Lösung für diese "/@eaDir/" Ordner gibt? Die würde ich gern überhaupt nicht auf meiner Synology haben wollen.
Ich bekomme die nicht weg. Wenn man die nicht weg bekommt, kann man ja vielleicht im Log oder im Find die Ordner ausschließen (aber wenn alles zu kompliziert lasse wir das alles lieber).

Ich mache mich jetzt mal ans Sortieren des Logs und evtl. anpassen mit Datumsangabe etc.

Wollen wir vielleicht auf Basis des Codes jetzt die anderen 3 Quellen hinzufügen und anschließend Form reinbringen durch setzen der Variablen? Ich würde mich sehr freuen wenn du mir wieder erklärend unter die Arme greifst.

Danke und viele Grüße
Seger
 
Bei find kannst noch probieren ein
Code:
-not \( -path "./@eaDir" -prune \)
oder
Code:
-not \( -path "*@eaDir*" -prune \)
einzufügen
 
Bei find kannst noch probieren ein

Code:
-not \( -path "*@eaDir*" -prune \)
einzufügen

Du bist einfach genial und ich checke immer mehr :-), DANKE!

Aktueller Stand:
Code:
#!/bin/bash
cd "/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "2018-02-22" -exec cp -uv --parents "{}" "/volumeUSB1/usbshare/- Filme x265 (Neu Test)/" 2>> "/volumeUSB1/usbshare/Fehler.txt" 1>> "/volumeUSB1/usbshare/Log.txt" \;

Log:
Code:
./Jumper (2008) -> /volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)
'./Jumper (2008)/Jumper (2008).nfo' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).nfo'
'./Jumper (2008)/Jumper (2008).mkv' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).mkv'
'./Jumper (2008)/clearart.png' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/clearart.png'
'./Jumper (2008)/banner.jpg' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/banner.jpg'
'./Jumper (2008)/logo.png' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/logo.png'

jetzt versuche ich dem Log noch einige Information zu spendieren wie z.B. Datum wann ausgeführt, Wie lange es gedauert hat, Startzeitpunkt und Endzeitpunkt, und es optisch in Form zu bringen. Mal scheuen was ich alles hinbekomme oder auch nicht :-).

Jetzt ist es soweit das wir den nächsten Schritt gehen könnten. Aber auch nur wenn du Zeit und Lust hast, keine Eile, Stress oder sonstiges. Will ja alles verstehen :-).

Danke nochmal, freu mich total wie es langsam Form annimmt :-)

VG
Seger
 
Zeitstempel bekommst mit einer Funktion (eine einfache Variable würde nur einmalig gesetzt, wenn initialisiert)

Rich (BBCode):
timestamp() {
  date +"%T"
}

# irgendwelche Befehle.
timestamp
# andere Befehle
timestamp

Anstatt %T gibt es noch weitere die man ausgeben kann
"%Y-%m-%d_%H-%M-%S"
Kannst einfach mit passender Formatierung wie du es haben willst zusammenfügen.
Schöne Übersicht hier
https://zxq9.com/archives/795

Um das ins Log zu bekommen entweder
timestamp >> Log
oder
echo "Startzeitpunkt: $(timestamp)" >> Log
mit erweitertem Text drum herum.

Wenn man doch etwas unschön mit Variablen arbeiten will, darf man diese eben nicht am Anfang des Scriptes setzen. Dann könnte folgendes funktionieren
Rich (BBCode):
before=$(date +%s)
sleep 5 bzw hier sind die ganzen Befehle
after=$(date +%s)

echo "Script-Laufzeit:" $((after - $before)) "seconds"
 
?Okay, das mit dem Log machen wir später, das wird nochmal ein separater Punkt :-).

Hab jetzt einfach mal den 2 Pfad dazu kopiert:

Code:
#!/bin/bash
cd "/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "2018-02-22" -exec cp -uv --parents "{}" "/volumeUSB1/usbshare/- Filme x265 (Neu Test)/" 2>> "/volumeUSB1/usbshare/Fehler.txt" 1>> "/volumeUSB1/usbshare/Log.txt" \;

cd "/volume1/DiskStation/Emby Testumgebung/- Filme" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "2018-02-22" -exec cp -uv --parents "{}" "/volumeUSB1/usbshare/- Filme/" 2>> "/volumeUSB1/usbshare/Fehler.txt" 1>> "/volumeUSB1/usbshare/Log.txt" \;

was natürlich auch funktioniert. Doch jetzt macht es wohl Sinn mir das mit den setzen der Variablen ein wenig zu erklären.

Also z.B. 2 für die Quelle Variable:
$ QUELLE1="/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)"
$ QUELLE2="/volume1/DiskStation/Emby Testumgebung/- Filme"

Code:
#!/bin/bash

$ QUELLE1="/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)"
$ QUELLE2="/volume1/DiskStation/Emby Testumgebung/- Filme"

cd $ QUELLE1 && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "2018-02-22" -exec cp -uv --parents "{}" "/volumeUSB1/usbshare/- Filme x265 (Neu Test)/" 2>> "/volumeUSB1/usbshare/Fehler.txt" 1>> "/volumeUSB1/usbshare/Log.txt" \;

cd $ QUELLE2 && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "2018-02-22" -exec cp -uv --parents "{}" "/volumeUSB1/usbshare/- Filme/" 2>> "/volumeUSB1/usbshare/Fehler.txt" 1>> "/volumeUSB1/usbshare/Log.txt" \;

Bin ich da auf dem richtigen Weg? Oder wie müsste das z.B. aussehen? Hab ja jetzt den einfachen Weg gesucht um erstmal 2 Befehle nacheinander auszuführen, mann könnte natürlich auch noch schleifen einbauen weil es sich ja immer wiederholt. Ich würde vorschlagen du nimmst mich einfach nochmal an die Hand und ich lerne Stück für Stück.

Kein Stress wie gesagt! Ich bin noch bis heute Abend greifbar und dann erst wieder am Sonntag, ich habe ja aber auch Zeit.

Danke nochmal und viele Grüße
Seger
 
Ja, Schleife später dann vielleicht.

Die Variablen setzt du mit
VARIABLE="String"
Abrufen im Verlauf des Scriptes dann mit
$VARIABLE
je nachdem wo es vorkommt und welche Strings mit Leer/Sonderzeichen etc vorkommen muss man dann trotzdem abgrenzen/abfangen (damit es nicht falsch "gelesen" wird von der Shell) mit
"$VARIABLE"

Quelle, Ziel, Log-Pfad/Datei, Auswahl-Datum .. kannst alles in Variablen packen.
 
Ja, Schleife später dann vielleicht.

Die Variablen setzt du mit
VARIABLE="String"
Abrufen im Verlauf des Scriptes dann mit
$VARIABLE
je nachdem wo es vorkommt und welche Strings mit Leer/Sonderzeichen etc vorkommen muss man dann trotzdem abgrenzen/abfangen (damit es nicht falsch "gelesen" wird von der Shell) mit
"$VARIABLE"

Quelle, Ziel, Log-Pfad/Datei, Auswahl-Datum .. kannst alles in Variablen packen.


Schau mal was ich gemacht habe :-):

Rich (BBCode):
#!/bin/bash

$AUSWAHLDATUM="2018-02-22"

$QUELLE1="/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)"
$QUELLE2="/volume1/DiskStation/Emby Testumgebung/- Filme"
$QUELLE3="/volume1/DiskStation/Emby Testumgebung/- Kinderfilme"
$QUELLE4="/volume1/DiskStation/Emby Testumgebung/- Serien"

$ZIEL1="/volumeUSB1/usbshare/- Filme x265 (Neu Test)"
$ZIEL2="/volumeUSB1/usbshare/- Filme"
$ZIEL3="/volumeUSB1/usbshare/- Kinderfilme"
$ZIEL4="/volumeUSB1/usbshare/- Serien"

$LOGPFAD="/volumeUSB1/usbshare/Log.txt
$LOGFEHLERPFAD="/volumeUSB1/usbshare/Fehler.txt"

######################################################################


cd "$QUELLE1" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL1" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

cd "$QUELLE2" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL2" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

cd "$QUELLE3" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL3" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

cd "$QUELLE4" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL4" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

Habe ich es richtig verstanden? Ich habe es jetzt noch nicht getestet würde erst gern von dir noch das geschulte Auge drauf schauen lassen.

Bin total begeistert :-).

Danke und viele Grüße
Seger
 
Da fehlt noch ein Gänsefüßchen bei $LOGPFAD, aber ja, sollte so funktionieren. Kannst auch mit Arrays arbeiten und in eine Schleife packen, z.B.
Code:
QUELLE[1]="..."
...
for i in 1 2 3 4
do
   cd "${QUELLE[$i]}" && ...
done
 
Okay das mit den Arrays vielleicht später, erstmal muss ich den Code zum laufen kriegen und verstehen:

Code:
#!/bin/bash

$AUSWAHLDATUM="2018-02-22"

$QUELLE1="/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)"
$QUELLE2="/volume1/DiskStation/Emby Testumgebung/- Filme"
$QUELLE3="/volume1/DiskStation/Emby Testumgebung/- Kinderfilme"
$QUELLE4="/volume1/DiskStation/Emby Testumgebung/- Serien"

$ZIEL1="/volumeUSB1/usbshare/- Filme x265 (Neu Test)"
$ZIEL2="/volumeUSB1/usbshare/- Filme"
$ZIEL3="/volumeUSB1/usbshare/- Kinderfilme"
$ZIEL4="/volumeUSB1/usbshare/- Serien"

$LOGPFAD="/volumeUSB1/usbshare/Log.txt"
$LOGFEHLERPFAD="/volumeUSB1/usbshare/Fehler.txt"

cd "$QUELLE1" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL1" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

cd "$QUELLE2" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL2" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

cd "$QUELLE3" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL3" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

cd "$QUELLE4" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL4" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

Die Gänsefüsse habe ich korrigiert, aber es passiert nichts, kann es sein, dass ich falsch "einfange" mit "$" muss ich vielleicht was anders setzen?

Danke bis hierhin :-).

Viele Grüße
Seger
 
Zuletzt bearbeitet von einem Moderator:
Bei einer Variablenzuweisung solltest Du das führende $-Zeichen vor dem Variablennamen weglassen - also z.B. QUELLE1="/volume1...".
 
Achso, seh ich jetzt erst. Beim setzen der Variablen kommt kein $ davor, nur bei deren Verwendung.
 
Zeitstempel bekommst mit einer Funktion (eine einfache Variable würde nur einmalig gesetzt, wenn initialisiert)

Rich (BBCode):
timestamp() {
  date +"%T"
}

# irgendwelche Befehle.
timestamp
# andere Befehle
timestamp

Anstatt %T gibt es noch weitere die man ausgeben kann
"%Y-%m-%d_%H-%M-%S"
Kannst einfach mit passender Formatierung wie du es haben willst zusammenfügen.
Schöne Übersicht hier
https://zxq9.com/archives/795

Um das ins Log zu bekommen entweder
timestamp >> Log
oder
echo "Startzeitpunkt: $(timestamp)" >> Log
mit erweitertem Text drum herum.


Bei einer Variablenzuweisung solltest Du das führende $-Zeichen vor dem Variablennamen weglassen - also z.B. QUELLE1="/volume1...".

Achso, seh ich jetzt erst. Beim setzen der Variablen kommt kein $ davor, nur bei deren Verwendung.


Hallo zusammen,

HERZLICHEN DANKE echt genial, bis jetzt läuft alles! Ich würde euch gerne ein Update des Codes geben und mich nun mit eurer Hilfe erstmal dem Log Layout widmen, schleifen, Arays oder ähnliches würde ich gern später machen um alles zu verstehen. Anbei der momentane Code:

Code:
#!/bin/bash
AUSWAHLDATUM="2018-02-22"

QUELLE1="/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)"
QUELLE2="/volume1/DiskStation/Emby Testumgebung/- Filme"
QUELLE3="/volume1/DiskStation/Emby Testumgebung/- Kinderfilme"
QUELLE4="/volume1/DiskStation/Emby Testumgebung/- Serien"

ZIEL1="/volumeUSB1/usbshare/- Filme x265 (Neu Test)"
ZIEL2="/volumeUSB1/usbshare/- Filme"
ZIEL3="/volumeUSB1/usbshare/- Kinderfilme"
ZIEL4="/volumeUSB1/usbshare/- Serien"

LOGPFAD="/volumeUSB1/usbshare/Log.txt"
LOGFEHLERPFAD="/volumeUSB1/usbshare/Fehler.txt"

timestamp() {
  date +"%d.%m.%Y - %T"
}

echo "
Startzeitpunkt: $(timestamp)
" >> $LOGPFAD

cd "$QUELLE1" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL1" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;
cd "$QUELLE2" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL2" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;
cd "$QUELLE3" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL3" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;
cd "$QUELLE4" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL4" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

Anbei das momentane Log:

Code:
Startzeitpunkt: 09.03.2018 - 19:47:18


Startzeitpunkt: 09.03.2018 - 19:47:45

./Jumper (2008) -> /volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)
'./Jumper (2008)/Jumper (2008).nfo' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).nfo'
'./Jumper (2008)/Jumper (2008).mkv' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).mkv'
'./Jumper (2008)/clearart.png' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/clearart.png'
'./Jumper (2008)/banner.jpg' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/banner.jpg'
'./Jumper (2008)/logo.png' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/logo.png'

-> Eine Funktion (Startzeitpunkt inkl. meiner Wunschformatierung) habe ich schon hinbekommen und auch die freie Zeile danach.

Vielleicht macht es Sinn um euch einmal zu zeigen wie ich es gern aufbauen würde:

Code:
[COLOR="#008000"]Der neue Kopiervorgang soll immer oben angehangen werden (immer oben stehen und nicht unten)[/COLOR]
Startzeitpunkt: 09.03.2018 - 19:47:18


Startzeitpunkt: 09.03.2018 - 19:47:45
[COLOR="#008000"]Dauer Kopiervorgang in (Stunden:Minuten:Sekunden):
Endzeitpunkt:[/COLOR]

[COLOR="#008000"]Kopierte Datenmenge in MB:[/COLOR]

-> /volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)
-> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).nfo'
-> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).mkv'
-> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/clearart.png'
-> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/banner.jpg'
-> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/logo.png'
[COLOR="#008000"]LEERZEILE ZWISCHEN DEN PFADEN[/COLOR]
-> /volumeUSB1/usbshare/- Filme/./Testfilm (2010)
-> '/volumeUSB1/usbshare/- Filme/./Testfilm (2010)/Testfilm (2010).nfo'

[COLOR="#008000"]Der vordere Bereich bis zum "->" soll weg so dass es so aussieht in jeder Zeile [/COLOR]

Wenn Ihr damit vielleicht wieder mit klaren Erklärungen helfen könntet, wäre ich wie immer sehr dankbar!

Danke und viele Grüße
Seger
 
Bitte mal nicht mehr so viel zitieren, da du eh meist kein spezifischen Punkt ansprichst. Ein @Benutzer reicht völlig, solange noch halbwegs klar ist, auf was du dich beziehst.

Für die Leerzeile einfach hinten in die find Zeile noch ein
Rich (BBCode):
echo -e "\n" ;
oder
echo -e "\n\n" ;
anhängen. Eventuell auch direkt als Ausgabe >> ins log.

Das Logformat dürfte deutlich mit dem "verbose" von cp abhängen.

Für die Zeitdauer hatte ich ja schon ein Code-Schnipsel gebracht.
Für die übertragene Datenmenge habe ich heute Abend keine Idee mehr.
 
Okay, wollte es übersichtlich gestalten aber du hast recht, hab das Gegenteil bewirkt.

Den Echobefehl werde ich morgen Abend mal einbauen, zu dem Codeschnipsel hab ich noch eine Frage.

Das ist ja keine Variable, setze ich das einfach ans Ende? Ist das sozusagen ein Abfolge die für sich alleine steht. Werde die gleich mal studieren und schauen ob ich die Zeichen schon zuschlüsseln kann.

Das anpassen der Zeilen im Log muss ich wohl mit Sortieren angehen. Hatte auch schon was von nur „beschneiden/anzeigen“ gelesen.

Erstmal läuft ja alles ist nur Detail um es alles zu verstehen, danke dir ganz besonders.

Später können wir ja nochmal Dach schleifen oder Arays schauen, vielleicht bekomme ich ja schon ein wenig selber hin.


Danke und viele Grüße
Seger
 
Dachte die Anmerkung
"sleep 5 bzw hier sind die ganzen Befehle"
sei eindeutig. :)

Before irgendwo oben im Script, after und die Ausgabe der Dauer Richtung Ende des scripts.

Für das log kann man ja on-the-fly mit sed oder awk die strings bearbeiten, oder man schreibt das log erst mal so und bearbeitet das log dann am Ende nochmal separat.
Dinge wie Zeilenanfang bis > lassen sich ja leicht mit regular expressions erschlagen (Bsp "^.*- >").
Muss ich nochmal anschauen für einen vollständigen Code Schnipsel.
 
Moin Moin,

also ich habe den Code-Schnipsel mit der Skriptdauer eingebaut und es funktioniert tadellos, Danke! Die Leerzeichen habe ich auch verstanden, klasse :-).

Nun wäre "nur" noch die Optik der Ausgabe (über regular expressions), die kopierte Datenmenge in MB oder GB und das anhängen des aktuellen Log (letzte Ausführung nach oben danach die vorletzte Ausführung usw. "genau andersherum") übrig, dann wäre das Log voll und ganz nach meinem Geschmack.

Regular Expressions hast du ja schon ein Beispiel gesendet, dass macht auch Sinn von der Schreibweise aber ich weiß nicht wo ich das anhängen soll, vielleicht in jeder Zeile vorm Log?

Oder macht es jetzt mehr Sinn an Schleifen, Array oder ähnlichen zu arbeiten?

Anbei der aktuelle Stand:
Code
Code:
#!/bin/bash
AUSWAHLDATUM="2018-02-22"

QUELLE1="/volume1/DiskStation/Emby Testumgebung/- Filme x265 (Neu Test)"
QUELLE2="/volume1/DiskStation/Emby Testumgebung/- Filme"
QUELLE3="/volume1/DiskStation/Emby Testumgebung/- Kinderfilme"
QUELLE4="/volume1/DiskStation/Emby Testumgebung/- Serien"

ZIEL1="/volumeUSB1/usbshare/- Filme x265 (Neu Test)"
ZIEL2="/volumeUSB1/usbshare/- Filme"
ZIEL3="/volumeUSB1/usbshare/- Kinderfilme"
ZIEL4="/volumeUSB1/usbshare/- Serien"

LOGPFAD="/volumeUSB1/usbshare/Log.txt"
LOGFEHLERPFAD="/volumeUSB1/usbshare/Fehler.txt"

before=$(date +%s)

timestamp() {
  date +"%d.%m.%Y - %T"
}

echo -e "\nStartzeitpunkt: $(timestamp)\n" >> $LOGPFAD

cd "$QUELLE1" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL1" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;
cd "$QUELLE2" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL2" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;
cd "$QUELLE3" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL3" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;
cd "$QUELLE4" && find -not \( -path "*@eaDir*" -prune \) -type f -newermt "$AUSWAHLDATUM" -exec cp -uv --parents "{}" "$ZIEL4" 2>> "$LOGFEHLERPFAD" 1>> "$LOGPFAD" \;

after=$(date +%s)

echo -e "\nScript-Laufzeit:" $((after - $before)) "Sekunde(n)" >> $LOGPFAD

LOG
Code:
Startzeitpunkt: 11.03.2018 - 19:48:10

./Jumper (2008) -> /volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)
'./Jumper (2008)/Jumper (2008).nfo' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).nfo'
'./Jumper (2008)/Jumper (2008).mkv' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/Jumper (2008).mkv'
'./Jumper (2008)/clearart.png' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/clearart.png'
'./Jumper (2008)/banner.jpg' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/banner.jpg'
'./Jumper (2008)/logo.png' -> '/volumeUSB1/usbshare/- Filme x265 (Neu Test)/./Jumper (2008)/logo.png'

Script-Laufzeit: 68 Sekunden

Danke und viele Grüße
Seger
 
Ich würde mir den ganzen kram in eine Schleife packen, sodass man nur Quellpfad, Zielpfad und die Quellordner einmal angeben muss.

Rich (BBCode):
QUELLEN="- Filme x265 (Neu Test)
- Filme
- Kinderfilme
- Serien"


QUELLPFAD="/volume1/DiskStation/Emby Testumgebung/"
ZIELPFAD="/volumeUSB1/usbshare/"
 
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