[Erledigt] Namen eines übergeordneten Verzeichnisses (variiert) auslesen ?

  • Hi,


    Ich befinde mich z.b: im Verzeichnis "/var/lib/"
    In diesem Verzeichnis habe ich einen Ordner welcher im Namen variieren kann.
    Wie kann ich den Namen dieses Ordners per Script auslesen ?


    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    Einmal editiert, zuletzt von Bert ()

  • wie wäre es mit pwd?


    man pwd:


  • Moin


    ls -d <maske> sollte helfen. Wenn Dein Directoryname z.B. "ab123" enthalten soll machst Du

    Code
    ls -d /var/lib/*ab123*

    und Du kriegst alle Verzeichnisse mit passendem Muster ausgegeben. Etwaige vorhandene Dateien gleichen Namens werden aber mit ausgegeben.


    Gruss,
    Walter

    --seit 2010 kein vdr mehr in Betrieb--
    vdr 1.6.0 + eigene Patchkombination
    GNU/Linux 2.6.23.14 (Debian)
    DVB-S-Karte TT 1.6 (FF, Tuner defekt)
    DVB-S-Karte TT Budget (seit 4/09)
    DVB-T-Karte TT 1300
    DVB-T-USB-StickTerratec Cinergy T USB XE Rev. 2
    PC-Hauptplatine: MSI K8N Neo4-F, AMD 64 (seit 1/07)

  • Zitat

    Originally posted by Bert
    Ich befinde mich z.b: im Verzeichnis "/var/lib/"
    In diesem Verzeichnis habe ich einen Ordner welcher im Namen variieren kann.
    Wie kann ich den Namen dieses Ordners per Script auslesen ?


    Das ist aber was anderes, als das Topic "verspricht"!


    Wenn Du wirklich das aktuelle uebergeordnete Verzeichnis haben willst:

    Code
    pushd ..
    pwd #oder: basename `pwd`
    popd

    Und das aktuelle:

    Code
    basename `pwd`

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

    Einmal editiert, zuletzt von knebb ()

  • Hi,


    Danke Euch Allen erstmal, aber hmm ich glaub ich hab mich schlecht ausgedrückt.
    Ich schreib mal was ich vorhabe;
    Hab hier ausserm Vdr noch nen anderen SatReceiver der auf ne Usb Platte
    aufnehmen kann.
    Diese Aufnahmen will ich natürlich am Pc zu ner Dvd verarbeiten können.


    Diese Aufnahmen liegen wie folgt vor;
    Ein Ordner mit der Bezeichnung Braveheart 27-10-2008
    In diesem Ordner liegen die relevanten Files
    wie folgt;
    Braveheart 27-10-2008.trp
    Braveheart 27-10-2008.001
    Braveheart 27-10-2008.002


    Nun möchte ich ein Script drauf loslassen können welches mir zunächst die
    einzelnen Teile der Aufnahme zusammenmerged.
    Mittels cat wär das auch kein Problem, danach dann halt ProjectX
    etc.. bis hin zur fertigen Dvd.


    Dazu habe ich hier ein Verzeichnis "/var/lib/" in welches ich den gesammten Ordner in diesem Beispiel Braveheart 27-10-2008 hineinschiebe.
    Aber wie kann das Script nun wissen welchen Namen der Ordner Braveheart 27-10-2008 trägt denn der heisst ja ein anderes mal wieder anders
    (z.b: Stirb Langsam 05-12-2008 je nachdem wie die Aufnahme halt heisst
    > variiert also).


    Muss ja das Script auf (in diesem Beispiel Braveheart 27-10-2008) anwenden können.
    Denn ich muss dann im Ordner die einzelnen Files der Aufnahme auch umbenennen lassen denn die Leerzeichen machen ja ein Problem schon
    beim mergen mittels cat.
    Der Ordner Braveheart 27-10-2008 selbst müsste auch umbenannt werden
    da er ja ebenfalls ein Leerzeichen enthält und ich das Ergebnis auch als Titel verwenden will.


    Wenn erst mal das Umbenennen und das mergen klappt ist der Rest
    ja recht leicht zu verwirklichen.


    Sicher mittels ls -l und auch mit
    ls -d /var/lib/*-* wie von Walter, dg9ep vorgeschlagen kriegt man bestimmt was hin ebenso mit;
    find -type d wie von slime, aber ich dachte da gibts vielleicht bessere Lösungen


    mit pwd jedenfalls ist mir das nicht ganz klar denn das zeigt mir ja das
    aktuelle Verzeichnis in dem ich stehe an
    also wenn im Script der Befehl;


    cd /var/lib


    steht, dann zeigt mir ein anschliessendes pwd auch /var/lib an.
    Ich bräuchte da ber dann ne Ausgabe wie;
    /var/lib/Braveheart 27-10-2008



    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    Einmal editiert, zuletzt von Bert ()

  • Ich bin mir nicht sicher, ob ich Dich richtig verstehe.


    Du hast im Ordner /var/lib Verzeichnisse.


    cd /var/lib


    Du moechtest ein Script, das aus allen Eintraegen dort irgendwas macht, wenn es Verzeichnisse sind


    for i in * ; do
    if [ -d "${i}" ] ; then
    echo "tu es mit ${i}"
    else
    echo "lass es mit ${i}"
    fi
    done


    Dazu noch Leerzeichen aus dem Namen von Verzeichnissen entfernen


    for i in * ; do
    if [ -d "${i}" ] ; then
    echo "tu es mit $(echo ${i}|sed -e 's/ //g') ohne Leerzeichen"
    else
    echo "lass es mit ${i}"
    fi
    done

  • Hallo Bert,


    wenn ich Deine Fragen richtig verstehe, möchtest Du in Deinem Beispiel "Braveheart" rausfinden und das Datum überspringen?!?


    Sowas könntest Du machen, indem Du find nach den index-Dateien suchen läßt (also bei Dir z.B. die *.trp) und auf den kompletten Pfad 2mal dirname anwendest.
    Beim ersten dirname wird die Datei vom Pfad entfernt und beim 2. Aufruf fällt dann der Zeitstempel wech.


    Bei Serien mit Untertitel müsstest Du das dan 3mal machen ;)


    dirname ist übrigens das Gegenstück zu basename, welches Dir den Dateinamen liefert, also z.B. das "Braveheart" ohne /var/lib davor.


    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Hi ihr Beiden,
    Danke erst mal für die Tipps!


    hvkls

    Zitat

    ich bin mir nicht sicher, ob ich Dich richtig verstehe.


    Du hast im Ordner /var/lib Verzeichnisse.


    Ja fast richtig verstanden > in /var/lib liegt hier dann immer nur ein Ordner
    in meinem jetzigen Beispiel also Braveheart 27-10-2008


    Diesen soll das Script herausfinden und automatisch in Braveheart umbenennen
    (da wären dann die Leerzeichen weg und auch das Datum brauch ich ja auch nicht).
    Weiters will ich mit dem Script dann den Namen des Ordners
    (welcher dann schon von Leerzeichen und Datum befreit ist) als Titel für die fertige Dvd verwenden können


    Weiters liegen in diesem Ordner folgende Files;
    Braveheart 27-10-2008.trp
    Braveheart 27-10-2008.001
    Braveheart 27-10-2008.002


    Das sind die relevanten Files der Aufnahme, und die sollten ebenfalls automatisch vom Script umbenannt werden (also wieder von Leerzeichen und Datum befreit werden.


    Danach kommt dann der leichte Teil wie;
    Mergen mit cat
    Demuxen mit ProjectX
    Muxen mit Tcmplex-panteltje
    Authoren mit dvdwizard


    Mein Problem liegt eigentlich nur darin den Ordner Braveheart 27-10-2008
    automatisch durch das Script erkennen zu lassen sowie diesen und die
    Files die darin liegen also;
    Braveheart 27-10-2008.trp
    Braveheart 27-10-2008.001
    Braveheart 27-10-2008.002
    vollautomatisch von Leerzeichen und Datum zu befreien (umbenennen also).


    Um bei diesem Beispiel zu bleiben sollte dann der Ordner nur noch
    Braveheart heissen,
    und die Files darin so wie folgt;
    Braveheart.trp
    Braveheart.001
    Braveheart.002


    Wobei Braveheart auch gleich für die Titelübergabe verwendet werden soll.


    Hinzu kommt dann noch das es im Ordner Braveheart 27-10-2008 je nach Aufnahmelänge auch ne Braveheart 27-10-2008.003 und Braveheart 27-10-2008.004 usw. geben könnte.


    Ich hab sowas schon mal fürn Start aus dem Vdr heraus über die reccmds.conf
    geschrieben, aber da war das bedeutent leichter weil da ja der Name der Aufnahme immer bekannt ist für das Script.
    Man hat ja beim Vdr auch die Möglichkeit den Titel aus der info.vdr auszulesen
    um ihn weiterzuverarbeiten.



    geronimo

    Zitat

    wenn ich Deine Fragen richtig verstehe, möchtest Du in Deinem Beispiel "Braveheart" rausfinden und das Datum überspringen?!?


    Nun ich hoffe das ist mit der Antwort oben beantwortet.


    Zitat

    Sowas könntest Du machen, indem Du find nach den index-Dateien suchen läßt (also bei Dir z.B. die *.trp) und auf den kompletten Pfad 2mal dirname anwendest.
    Beim ersten dirname wird die Datei vom Pfad entfernt und beim 2. Aufruf fällt dann der Zeitstempel wech.


    Bei Serien mit Untertitel müsstest Du das dan 3mal machen ;)


    dirname ist übrigens das Gegenstück zu basename, welches Dir den Dateinamen liefert, also z.B. das "Braveheart" ohne /var/lib davor.


    Werd ich mir auch ansehen.




    Bin aber jetzt nicht so der Überscripter hab zwar schon das ein oder andere Script gebastelt aber eigentlich stehe ich immer noch am Anfang des Scriptens > hab halt nicht so die Zeit gefunden bisher.
    Aber ich werd mich bessern ;)


    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    Einmal editiert, zuletzt von Bert ()


  • Statt den 'echo ... -> ...' dann halt 'mv' zum Scharfschalten.


    Christian

  • Hi, hopsi



    Das ist ja schon ne fix und fertige Lösung, und sieht auch ganz elegant aus :]


    Danke !



    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Hi,



    Hm, mit echo ist alles ok.
    Mit mv geht leider nix.


    Zitat

    mv: Fehlender Zieldatei-Operand hinter „'Braveheart 27-10-2008.001' -> 'Braveheart.001'“
    „mv --help“ gibt weitere Informationen.
    mv: Fehlender Zieldatei-Operand hinter „'Braveheart 27-10-2008.002' -> 'Braveheart.002'“
    „mv --help“ gibt weitere Informationen.
    mv: Fehlender Zieldatei-Operand hinter „'Braveheart 27-10-2008.trp' -> 'Braveheart.trp'“
    „mv --help“ gibt weitere Informationen.


    Werd nicht schlau daraus > hab ein paar Varianten probiert aber klappte nicht.


    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau


  • So sollte es gehen.

  • Hi, C-3PO


    Nein geht nicht;

    Zitat

    Braveheart 27-10-2008.001 -> Braveheart.001
    Braveheart 27-10-2008.002 -> Braveheart.002
    Braveheart 27-10-2008.trp -> Braveheart.trp
    mv: Fehlender Zieldatei-Operand hinter „Verzeichnis Braveheart 27-10-2008 Braveheart“
    „mv --help“ gibt weitere Informationen.


    Ausserdem würden ja dann die Files im Verzeichnis nicht umbenannt.


    Brauche hier statt;
    echo "${j} -> ${j// [0-9][0-9]-*./.}"


    das mv also;
    mv "${j} -> ${j// [0-9][0-9]-*./.}"


    und auch hier;
    echo "Verzeichnis ${i} -> ${dir_name}"
    also
    mv "Verzeichnis ${i} -> ${dir_name}"


    Das;
    mv "Verzeichnis ${i} ${dir_name}"
    oder das;
    mv "Verzeichnis ${i} -> ${dir_name}"
    erzeugt denselben Fehler.


    Gar nicht so einfach wies scheint,
    Kann es sein das das Leerzeichen im Verzeichnis das Probs verursacht ?
    Denn im Script wird ja das Verzeichnis erst zum Schluss umbenannt > es wird vorher versucht die Files in dem Verzeichnis umzubenennen.


    mv in der Shell klappt jedenfalls nicht bei Leerzeichen in Ordnern.


    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Hi!


    Zitat

    Original von Bert
    Das;
    mv "Verzeichnis ${i} ${dir_name}"
    oder das;
    mv "Verzeichnis ${i} -> ${dir_name}"
    erzeugt denselben Fehler.


    Ist doch klar. Durch die Anführungszeichen übergibst Du immer nur einen Wert an das mv.
    Richtig (vom Aufruf her) ist

    Code
    mv "${i}" "${dir_name}"


    Zitat

    Gar nicht so einfach wies scheint,
    Kann es sein das das Leerzeichen im Verzeichnis das Probs verursacht ?


    Nur, wenn man nicht weiß, wie man sie korrekt behandelt ;)
    Also entweder den Text, der Leerzeichen enthält, in Anführungszeichen setzen, oder jedes Leerzeichen mit \ escapen. z.B. "Text mit Spaces" oder: Text\ mit\ Spaces


    Gruß,
    Andreas

  • Hi, amair


    Danke , genau das wars :]
    Hatte es heute schon mal so ähnlich;


    Dabei hats mir die Files zerlegt > nur noch 0kb Grösse


    Dank dir siehts nun so aus;


    und damit hauts nun endlich hin.


    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    Einmal editiert, zuletzt von Bert ()


  • Genau so war's gedacht. Sorry, daß ich Rätsel aufgegen habe, ich hatte erwartet, dass das 'mv' kein größeres Problem mehr darstellt.


    Zum Weiterarbeiten stehen dann in den Variablen $film_name und $dir_name die entsprechenden Werte zur Verfügung. Sonst wär's auch kürzer gegangen.


    Christian

  • Hi, hopsi


    Zitat

    Genau so war's gedacht. Sorry, daß ich Rätsel aufgegen habe, ich hatte erwartet, dass das 'mv' kein größeres Problem mehr darstellt.


    Na das macht ja nix, nochmals Danke das du mir so ne schöne Lösung
    direkt vor die Nase gesetzt hast :)


    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Hi,


    So derweil sieht das Script dann so aus;


    Das Ganze ist erst noch provisorisch.
    Kann man das so lassen, oder gibts ne bessere Lösung ?


    Könnte man die ganze Titelübergabe nicht gleich oben in der for Schleife beim mv miterledigen ?
    Habs versucht, aber nix gescheites hinbekommen.


    Oben in der for Schleife werden ja auch mittels mv der Ordner und die Files
    darin umbenannt und so Leerzeichen entfernt.
    Das klappt um beim Beispiel Braveheart 27-10-2008 als Ordner zu bleiben
    sehr gut > der heist dann nur noch Braveheart.
    Bei den Files darin ist das analog das Gleiche also heisst z.b: Braveheart 27-10-2008.trp dann nur noch Braveheart.trp


    Aber wenn nun der Ordner nicht Braveheart 27-10-2008 sondern
    Stirb Langsam 27-10-2008 heisst wird daraus Stirb Langsam
    (es bleibt also ein Leerzeichen bestehen) und wenn ein Ordner
    aus noch mehr Worten besteht bleiben dementsprechend auch mehrere
    Leerzeichen über.
    Könnte man das nicht alles gleich beim mv in der for Schleife berücksichtigen
    so dass einfach keine Leerzeichen beim umbenennen bleiben egal aus wieviel
    Worten der Ordner besteht ?


    Gruss, Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    Einmal editiert, zuletzt von Bert ()


  • Nicht getestet.


    Christian

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!