Script, zum Erstellen einer Textdatei mit Liste zum Inhalt eines Ordners

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

tommytom79

Benutzer
Registriert
09. Sep. 2013
Beiträge
608
Reaktionspunkte
13
Punkte
38
Hallo!

Ich bräuchte ein Script, welches mir täglich eine Textdatei mit Inhalt eines Ordners inkl. Unterordner (video/Kinderfilme/) anlegt.
Der Pfad, wo die Datei abgelegt werden soll, kann ruhig auch im gleichen Verzeichnis sein.

Ich hoffe, dass mir jemand helfen kann.

LG
Thomas
 
Hi,

probier es mal hiermit:
Rich (BBCode):
DATE=$(date +"%Y%m%d_(%H%M%S)")
ls -R /volume1/vidoe/Kinderfilme | sort > "/volume1/video/Kinderfilme/liste_$DATE.txt"

Gruß
luddi
 
Zuletzt bearbeitet:
hallo

danke sehr für die rasche Antwort, werd ich gleich probieren, wenn ich nach Hause komme
werden auch Unterordner von "Kinderfilme" berücksichtigt? heißt, dass ich im Ordner "Kinderfilme" noch mehrere Unterordner habe

lg
 
Der Parameter -R steht für 'rekursiv' und somit werden alle Dateien in allen Unterordner unter dem Verzeichnis "Kinderfilme" gelistet.
 
super danke
 
Funktioniert, danke. Nur, wenn ich dieses Textfile mit dem normalen Windows Editor öffne, steht alles in einer Wurst. Wenn ich es mit WordPad öffne, stehen auf den ersten Seiten die Verzeichnisnamen und unten dann die Dateinamen.
Super wäre es, wenn er mir, egal mit welchem Editor ich das Textfile öffne, pro Zeile den Pfad inkl. Dateinamen anzeigt. Wäre das noch irgendwie möglich?

LG
Thomas
 
Hallo Zusammen,

vor dem gleichen Problem stehe ich auch.
Wenn ich mit dem og. Befehl eine Liste aller meiner Ordner aus dem Ordner Filme erstellen will, habe ich zwar die Text-Datei mit allen Filmtiteln enthalten, jedoch sind diese ohne Zeilenumbruch hintereinanderweg gelistet.

Bei mir ist nur der Unterschied, das eine Liste mit den enthaltenen Ordnern reicht.

Beispiel:

Film1 Film2 Film3 etc.

Und so sollte es aussehen:

Film1
Film2
Film3
etc.

Aktuell nutze ich folgenden Befehl:
DATE=$(date +"%Y%m%d_(%H%M%S)")
ls -A /volume1/filme | sort > "/volume1/filme/liste_$DATE.txt"

Kann mir bitte jemand helfen das Problem zu lösen. Ich bin leider ein Linux Noob. ;-)

Vielen Dank im Voraus!

Gruß
PaT
 
Um welche Dateitypen handelt es sich?

z.B. für mkv´s kannst du dieses hier verwenden:

Rich (BBCode):
#!/bin/sh

Suchpfad="/volume1/filme"
Zielpfad="/volume1/filme"

OIFS=$IFS
IFS=$'\n'
DATE=$(date +"%Y%m%d_(%H%M%S)")

for item in `find "$Suchpfad" -type f -regex '.*\.[mM][kK][vV]$'`; do
  echo `basename "$item" .mkv` >> "$Zielpfad/liste_$DATE.txt"
done

IFS=$OIFS
exit 0

Die Ausgabe ist dann wie folgt:
Rich (BBCode):
#cat liste_[DATUM].txt
Film 1
Film 2
..usw

Gruß
luddi
 
Es geht lediglich um die Ausgabe der enthaltenen Ordner. Welche Dateitypen sich wiederum in den Ordnern befinden spielt keine Rolle.
Mein Problem besteht darin, dass die Ausgabe in der Datei ohne Zeilenumbrüche erfolgt.

Was also muss ich an dem von mir genannten Befehl ändern, so dass die Ausgabe in der .txt-Datei mit Zeilenumbrüchen erfolgt.
Geöffnet wird die Datei unter Windows mit dem Editor/Notepad.

Gruß und Danke für die rasche Antwort.
PaT
 
Probiere es doch zunächst einmal aus das script... dann wirst du sehen dass es genau das macht was du dir vorstellst nämlich die Dateinamen (Filme) schön untereinander mit Zeilenumbruch auflistet.

Ein kleines Beispiel zu dem Script...
Zur Annahme deine Verzeichnisstruktur schaut wie folgt aus:

Rich (BBCode):
/volume1/filme
      +Film 1
            / Film 1.mkv

      +Film 2
            / Film 2.mkv

Und dann erhältst du mit dem von mir gezeigten Script folgende Ausgabe:
Rich (BBCode):
Film 1
Film 2

Ganz ohne Dateiendung und mit Zeilenumbruch. Ich denke das ist genau das was du dir doch wünscht, oder etwa nicht?

Gruß
luddi
 
Das ist soweit richtig.
Mir geht es aber dennoch allein um die Ordnernamen. Insbesondere die Dateitypen variieren zwischen mkv, avi und iso.
Dazu kommt, das die Ordnerbezeichnungen meist besser sind, als die eigentlich Dateinamen der Videodateien, da diese oft vom Titel her abgekürzt sind.
Daher wäre mir die Lösung mit einer Auflistung der Ordner selber lieber.

Verzeichnisstruktur:
Rich (BBCode):
/volume1/filme
      +Film 1
      +Film 2
      +Film 3

Ausgabe in der .txt-Datei
Rich (BBCode):
Film 1
Film 2
etc.
 
Mir geht es aber dennoch allein um die Ordnernamen. Insbesondere die Dateitypen variieren zwischen mkv, avi und iso.
Das hier ist überhaupt kein Problem... dazu kann man noch weitere Dateierweiterungen definieren.

Dazu kommt, das die Ordnerbezeichnungen meist besser sind, als die eigentlich Dateinamen der Videodateien, da diese oft vom Titel her abgekürzt sind.
Das hier muss ich nicht unbedingt verstehen dass die Dateinamen anders benannt sind als die Verzeichnisse in denen die Filme liegen. Es handelt sich doch um den exakt gleichen Film... Aber das ist etwas persönliches und möchte dir hier nicht in deine Dateistrukturen hineinreden. Jeder macht es so wie es ihm am besten gefällt, also respektiere ich deine Strukturen.

Daher wäre mir die Lösung mit einer Auflistung der Ordner selber lieber.

Verzeichnisstruktur:
Rich (BBCode):
/volume1/filme
      +Film 1
      +Film 2
      +Film 3

Ausgabe in der .txt-Datei
Rich (BBCode):
Film 1
Film 2
etc.
Und wenn ich deine Anforderung richtig verstanden habe dann soll die Ausgabe natürlich nur den Namen des Films beinhalten und nicht den kompletten Dateipfad, richtig?

Gruß
luddi
 
Ansonsten liefert ein
Code:
find -maxdepth 1 -type d
auch nur die Unterordner im aktuellen Ordner (wo man natürlich die reinen Namen wieder herausstrippen kann)...
 
Und man muss natürlich wieder die bekannten '@eaDir' Verzeichnisse ausblenden...

Gruß
luddi
 
Also wie gesagt bin ich ein Noob was die Befehle angeht.
Daher kann ich mit den von euch genannten neuen Vorschlägen nicht so richtig was anfangen.

Um meine Frage jetzt nochmal zu betonen:

Gibt es eine Möglichkeit beim folgenden Befehl einen Parameter einzubauen, der für einen Zeilenumbruch in der .txt-Datei sorgt?

Code:
DATE=$(date +"%Y%m%d_(%H%M%S)")
ls -A /volume1/filme | sort > "/volume1/filme/liste_$DATE.txt"

Ich bin auch gerne offen für andere Lösungsansätze, die zum gleichen Ergebnis führen würden.
Jedoch bräuchte ich die fertig zum Kopieren und Einfügen. ;-)

Vielen Dank im Voraus!
Gruß
PaT
 
Hier, nimm das...

...nur noch die Parameter 'Suchpfad' und 'Zielpfad' entsprechend deiner Umgebung anpassen, Fertig!

Rich (BBCode):
#!/bin/sh

Suchpfad="/volume1/filme"   #Suchpfad entsprechend eigener Umgebung anpassen
Zielpfad="/volume1/filme"   #Zielpfad entsprechend eigener Umgebung anpassen
tempOutFile="$Zielpfad/.tempOutFile"

DATE=$(date +"%Y%m%d_(%H%M%S)")

ls -A "$Suchpfad" | sort > "$tempOutFile"
sed -i '/\@eaDir/d' "$tempOutFile"

mv "$tempOutFile" "$Zielpfad/liste_$DATE.txt"

exit 0

Gruß
luddi
 
[...]
Geöffnet wird die Datei unter Windows mit dem Editor/Notepad
[...]
Sorry, jetzt erst habe ich dein eigentliches Problem verstanden. Die Liste wird mit dem unix line feed (Unix LF) erstellt und das kann Windows mit seinem Notepad nicht als Zeilenumbruch erkennen. Windows benötigt dafür den CR LF (carriage return line feed). Aber wenn du die Datei mit einem vernünftigen Editor öffnest dann wird dieser das auch richtig interpretieren.
z.B. Notepad++ (http://notepad-plus-plus.org)

Den Unterschied beider Editoren siehst du im folgenden Bild.

Notepad_vs_Notepad++.png

Gruß
luddi
 
Dass die Dateien bei einem anderen Editor/Programm anders dargestellt werden hatte ich bereits woanders gelesen.
Jedoch hatte ich die Hoffnung das es dafür eine Lösung gibt, die mit Hilfe von Parametern beim erstellen der Dateien direkt greift, ohne das ich wieder ein "Zusatzprogramm" installieren muss.

Wenn es dafür jedoch keine Lösung gibt, werde ich auf Notepad++ zurückgreifen. :)

Trotzdem vielen Dank für die Bemühungen bis hier hin.

Gruß
PaT
 
Hast du ipkg auf deinem System installiert? Wenn ja kannst du das package "dos2unix" installieren.

Und dann kannst du die Datei in das DOS Format umwandeln:

a.) entweder die Datei direkt
Rich (BBCode):
unix2dos file.txt

b.) oder die Datei einlesen und eine neue erstellen, somit bleibt file.txt im unix Format und new_file.txt wird im DOS Format erstellt.
Rich (BBCode):
unix2dos -n file.txt new_file.txt

Gruß
luddi
 
Leider bin ich schon auf DSM 5.x.
Soweit ich das auf die schnelle recherchieren konnte, gibt es noch keine kompatible Version für DSM 5.

So muss ich mich dann wohl wirklich erstmal mit Notepad++ begnügen. ;-)
 
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