Frage

Um eine Wiedergabeliste für die gesamte Musik in einem Ordner zu erstellen, ich bin den folgenden Befehl in bash mit:

ls > list.txt

Ich möchte das Ergebnis der verwenden PWD (print working directory) Befehl für den Namen der Wiedergabeliste.

So etwas wie:

ls > ${pwd}.txt

Das ist nicht jedoch nicht funktioniert - kann mir jemand sagen, welche Syntax Ich brauche so etwas zu tun zu verwenden,

Edit: Wie in den Kommentaren erwähnt PWD wird Aufgeben einen absoluten Pfad beenden, so wird meine Playlist am Ende wird in einem Verzeichnis namens .txt - d'oh! Also werde ich den Weg trimmen. Dank für das Auffinden, dass - ich wahrscheinlich im Alter ausgegeben hätte fragen, wo meine Dateien gingen

War es hilfreich?

Lösung

Der beste Weg, dies zu tun ist mit "$(command substitution)" (danke, Landon ):

ls > "$(pwd).txt"

Sie werden manchmal auch Menschen, die ältere Graviszeichen Schreibweise verwenden, aber dies hat mehr Nachteile hinsichtlich der Verschachtelung und entweichende:

ls > "`pwd`.txt"

Beachten Sie, dass die nicht verarbeiteten Substitution von pwd ist ein absoluter Pfad, so dass der obige Befehl eine Datei mit dem gleichen Namen im selben Verzeichnis wie das Arbeitsverzeichnis erstellt, aber mit einer .txt Erweiterung. Thomas Kammeyer wies darauf hin, dass der basename Befehl, um das führende Verzeichnis Streifen, so würde dies eine Textdatei im aktuellen Verzeichnis mit dem Namen des Verzeichnisses erstellen:

ls > "$(basename "$(pwd)").txt"

Danke auch an erichui für das Problem der Räume auf dem Weg der Erziehung.

Andere Tipps

Dies ist gleichbedeutend mit der Graviszeichen Lösung:

ls > $(pwd).txt

wahrsten Sinne des Wortes zu tun, was Sie gesagt haben, könnten Sie versuchen:

ls > `pwd`.txt

, die die vollständigen Pfadnamen verwenden, was in Ordnung sein sollte. Beachten Sie, wenn Sie in Ihrem Home-Verzeichnis tun dies, die möglicherweise sein in / home / hoboben, werden Sie versuchen, das schaffen /home/hoboben.txt, eine Textdatei im Verzeichnis oben.

Ist das, was Sie wollten?

Wenn Sie das Verzeichnis enthält eine Datei mit dem Namen, nachdem sie wollten, würden Sie bekommen der Basisname des aktuellen Verzeichnisses und fügen Sie, dass mit .txt an den PWD.

Nun, anstatt den Befehl pwd verwenden ... warum nicht den PWD-Umgebungsvariable verwenden?

Zum Beispiel:

ls > $PWD.txt

oder

ls > ${PWD}.txt

ist wahrscheinlich das, was Sie versuchen, mit Ihrem zweiten Beispiel zu erinnern.

Wenn Sie in / home / hoboben und Sie wollen /home/hoboben/hoboben.txt erstellen, versuchen Sie:

ls > ${PWD}/${PWD##*/}.txt

Wenn Sie dies tun, wird die Datei einen eigenen Namen enthalten, so oft die meisten, können Sie dies von ein paar Möglichkeiten, in einer würde Abhilfe schaffen. Sie könnten irgendwo anders umleiten und die Datei verschieben oder die Datei mit einem Punkt beginnen zu nennen, es zu verbergen von dem ls so lange bekommen wie Sie die Flags -a verwenden (und dann die resultierende Datei optional umbenennen).

Ich schreibe meine eigene Skripte eine Verzeichnishierarchie von Musikdateien zu verwalten und ich Verzeichnisse verwenden den Namen „.info“, zum Beispiel Spurdaten in einigen Ersatz Dateien enthalten (im Grunde, ich ‚verstecken‘ Metadaten diese Art und Weise). Es funktioniert schon ganz gut, weil meine Bedürfnisse einfach und meine Sammlung klein sind.

Ich vermute, dass das Problem sein kann, dass es Räume in eines des Verzeichnisnamen. Zum Beispiel, wenn Ihr Arbeitsverzeichnis „/ home / user / Musik / Künstlername“. Bash Denken verwechseln, die Sie versuchen zu / home / user / Musik / Künstler und name.txt zu umleiten. Sie können dieses Problem beheben, mit doppelten Anführungszeichen

ls > "$(pwd).txt"

Auch Sie können nicht auf $ (pwd) .txt umleiten möchten. In dem obigen Beispiel würden Sie die Ausgabe in die Datei „/ home / user / Musik / Künstler name.txt“ werden Umleitung

Die Syntax ist:

ls > `pwd`.txt

Das ist das ‚`‘Charakter nach oben unter dem‚~‘, nicht dem regulären Apostroph.

Verwendung des obigen Verfahrens werden die Dateien eine Ebene über dem aktuellen Verzeichnis erstellen. Wenn Sie die Play-Listen für alle zu einem Verzeichnis gehen wollen würden Sie brauchen so etwas wie zu tun:

#!/bin/sh

MYVAR=`pwd | sed "s|/|_|g"`
ls > /playlistdir/$MYVAR-list.txt

alle, aber die Verzeichnisnamen abzustreifen

ls >/playlistdir/${PWD##/*}.txt

Dies ist wahrscheinlich nicht das, was Sie wollen, weil dann wissen Sie nicht, wo die Dateien (sofern Sie den Befehl ls ändern)

ersetzen "/" mit "_"

ls >/playlistdir/${PWD//\//_}.txt

aber dann würden die Wiedergabeliste hässlich aussehen und vielleicht nicht einmal fit im Auswahlfenster

So dies wird Ihnen sowohl einen kurzen lesbaren Namen und nutzbare Pfade in der Datei

ext=.mp3 #leave blank for all files
for FILE in "$PWD/*$ext"; do echo "$FILE";done >/playlistdir/${PWD##/*}.txt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top