datei mit dir-names erzeugen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von apoca, 17.06.2006.

  1. apoca

    apoca Lypse

    Dabei seit:
    17.06.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Ich habe meine Alben nach dem Prinzip
    /mnt/Alben/Interpret1/Album1
    /mnt/Alben/Interpret1/Album2
    /mnt/Alben/Interpret2/Album3

    etc etc

    geordnet und will nun per shell-Skript in jedem Album-Ordner eine Datei, die so aussieht: -----$Interpret- $Album-----,mp3 , was zur besseren Ordnung einer Playlist führt. Wie lässt sich sowas machen??
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Schnellschuss:

    Code:
    for i in $(find /mnt/Alben -type d -depth 2); do echo $i | perl -an -F'/' -e 'chomp @F; print "-----$F[($#F-1)]-$F[$#F]-----,mp3"'>$i/datei; done
    
    Gruss, Xanti
     
  4. #3 Wolfgang, 17.06.2006
    Zuletzt bearbeitet: 17.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Was meinst du mit aussehen?
    Soll die Datei diesen Inhalt haben und in diesem Verzeichnis liegen?

    Wenn ja, dann versuch es mal mit folgendem Vorschlag, den du noch anpassen musst.
    Code:
    for i in $(find /mnt/Alben/ -type d -printf "%p\n");  do cd $i;ST=${PWD#*/Alben/};echo "-----${ST//\//-----}.mp3">Datei;done
    
    Sehe gerade Xanti war schneller, belass aber meine Version trotzdem mal hier, als Alternative.
    :D

    Gruß Wolfgang
     
  5. #4 apoca, 17.06.2006
    Zuletzt bearbeitet: 17.06.2006
    apoca

    apoca Lypse

    Dabei seit:
    17.06.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Code:
    apoca@krx[~]% for i in $(find /mnt/Alben -type d -depth 2); do echo $i | perl -an -F'/' -e 'chomp @F; print "-----$F[($#F-1)]-$F[$#F]-----,mp3"'>$i/datei; done
    find: warning: you have specified the -depth option after a non-option argument -type, but options are not positional (-depth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.
    
    find: Der Pfad muß vor dem Suchkriterium stehen.
    Usage: find [-H] [-L] [-P] [path...] [expression]
    
    Xanti, Geht soweit also noch nicht :-/

    Wolfgang, bei dir exitet es mit einer Fehlermeldung, dass es ganz viele dateien nicht findet... Liegt wohl daran, dass auch Spaces in $Album oder $Interpret vorhanden sind

    Also, es soll einfach eine Datei mit dem Namen -----$Interpret - $Album-----,mp3 erzeugt werden und in /mnt/music/Alben/Interpret/Album liegen, also in dem Dir in dem dieses eine Album liegt.
     
  6. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    @apoca: Welches OS?

    @Wolfgang: Hallo Wolfgang, lange nicht gesehen :)
     
  7. apoca

    apoca Lypse

    Dabei seit:
    17.06.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Debian 3.1
     
  8. #7 Wolfgang, 17.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo,
    mein Beispiel geht davon aus, dass deine Verzeichnisse nur zwei Ebenen tief gehen.
    Sonst solltest du eventuell mit -maxdepth 2 arbeiten.
    Code:
    for i in $(find /mnt/Alben/ -maxdepth 2 -type d -printf "%p\n");  do cd $i;ST=${PWD#*/Alben/};echo "-----${ST//\//-----}.mp3">Datei;done
    man find
    ;)
    Gruß Wolfgang
     
  9. #8 Wolfgang, 17.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo Xanti , brauch ich doch nicht mehr so oft, du machst das schon gelle ;)

    Hallo apoca
    ( Ich hatte mein Posting schon abgedrückt, bevor ich deine Antwort las)

    Wenn du Leerzeichen hast, dann musst du eben mit xargs und -print0 arbeiten, bzw die Variablen Quoten.
    Wenn die Datei diesen Namen ohne eigenen Inhalt haben soll, verwende einfach touch statt echo.
    Den Rest belass ich dir zum selber basteln. ;)

    Gruß Wolfgang
     
  10. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hmm, also nur Optionen umschaufeln. Da unterscheidet sich meine FreeBSD-find-Version von der von Debian.

    @Wolfgang: Werden bei "-maxdepth 2" nicht auch die Verzeichnisse erschlagen, die Tiefe 1 haben? Oder ist das noch ein Unterschied in den find-Versionen? :think:
     
  11. apoca

    apoca Lypse

    Dabei seit:
    17.06.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Da ich leider keine Ahnung von shell-Skripten habe, kann ich mit xargs und -print0 wirklich wenig anfangen. Basteln ist nicht so mein Ding. Darum hab ich ja hier gefragt...
     
  12. #11 Xanti, 17.06.2006
    Zuletzt bearbeitet: 17.06.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    @apoca: Kann Dir da nicht weiterhelfen, da ich eine andere Version von find und xargs habe, die sich stark von Deiner unterscheidet. Da muss Wolfgang oder jemand anderes ran :D

    edit: Parallel kannst Du in die info-Pages von find/xargs schauen, da stehen meistens einfache Beispiele drin. ("info find" in die Konsole eingeben.)
     
  13. apoca

    apoca Lypse

    Dabei seit:
    17.06.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Das hab ich jetzt mal gemacht.

    Code:
    for I in $(ls /mnt/music/Alben/)
    do
    for A in $(ls /mnt/music/Alben/$I)
      do
       touch /mnt/music/Alben/$I/$A/-----$I\ -\ $A-----.mp3
      done
    done 
    Wie mach ich da ne Abfrage, dass er die Datei nur erzeugt, falls sie noch nicht vorhanden ist?
     
  14. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wenn Du touch benutzt, musst Du nicht abfragen, ob die die Datei bereits existiert: existiert sie nicht, wird sie angelegt; existiert sie, wird nur die ctime/mtime der Datei geändert.

    Gruss, Xanti
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. apoca

    apoca Lypse

    Dabei seit:
    17.06.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Hm, da ist jetzt immer noch das Problem mit den Spaces. Wie kann man das lösen?
     
  17. #15 Wolfgang, 28.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo


    Code:
    for i in $(find /mnt/Alben -type d -depth [color=red][b]2[/b][/color]); do echo $i | perl -an -F'/' -e 'chomp @F; print "-----$F[($#F-1)]-$F[$#F]-----,mp3"'>$i/datei; done
    
    -depth akzeptiert IMHO keinen Parameter.

    Die Reihenfolge ist für depth aber egal.
    Lediglich die Bedingungen werden von Links nach Rechts aufgelöst.

    Also solltest du einfach die 2 weglassen, oder wenn die Tiefe auf 2 festgelegt sein soll -maxdepth 2 verwenden.
    Das Konstrukt von Xanti sollte dank Perl auch mit Leerzeichen klarkommen, wenn man es etwas anpasst und xargs einfügt.

    Code:
    find /mnt/Alben -depth -type d -print0 |xargs -0 -n1|perl -an -F'/' -e 'chomp @F;print "-----$F[(@F-1)]-$F[$#F]-----.mp3\n" unless (/^[.]+/)'
    
    Statt print kannst du natürlich auch ein touch als system absetzen. Der Pfad steht ja dann in $_. ;)

    Aber du willst nicht wirklich Dateinamen mit Leerzeichen erzeugen, wenn du damit nicht klarkommst. :oldman

    Gruß Wolfgang
     
Thema:

datei mit dir-names erzeugen

Die Seite wird geladen...

datei mit dir-names erzeugen - Ähnliche Themen

  1. Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...

    Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...: Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und...
  2. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  3. Dateiinhalte vergleichen - Neue Sätze dann ausgeben

    Dateiinhalte vergleichen - Neue Sätze dann ausgeben: Liebe Forumsmitglieder, ich benöte mal wieder Eure Hilfe: Ich möchte 2 Dateien vergleichen. Datei-1 hat z.B. 100 Datensätze mit mehreren Feldern...
  4. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...
  5. Timestamp an Inhalt einer Textdatei anfügen

    Timestamp an Inhalt einer Textdatei anfügen: Hallo, ich als neuer, unerfahrener Nutzer von Linux und der bash hätte folgende Frage. Und zwar würde ich gerne mit einem command den Zeitstempel...