73

フォルダー内のすべての音楽のプレイリストを作成するために、bash で次のコマンドを使用しています。

ls > list.txt

pwdコマンドの結果をプレイリストの名前に使用したいと思います。

何かのようなもの:

ls > ${pwd}.txt

しかし、それは機能しません。このようなことを行うために使用する必要がある構文を誰か教えてもらえますか?

編集:コメントで述べたように、pwdは絶対パスを与えることになるため、私のプレイリストはあるディレクトリで.txtという名前になります-d'oh! そのため、パスをトリミングする必要があります。それを見つけてくれてありがとう - 私はおそらく自分のファイルがどこに行ったのか疑問に思っていたでしょう!

4

7 に答える 7

88

これを行う最善の方法は、"$(command substitution)"(ありがとう、Landon ) を使用することです。

ls > "$(pwd).txt"

古いバックティック表記を使用している人も時々見かけますが、これにはネストとエスケープに関していくつかの欠点があります。

ls > "`pwd`.txt"

の未処理の置換pwdは絶対パスであるため、上記のコマンドは、作業ディレクトリと同じディレクトリに同じ名前のファイルを作成しますが、.txt拡張子が付きます。basenameThomas Kammeyer は、このコマンドは先頭のディレクトリを取り除くため、現在のディレクトリにそのディレクトリの名前でテキスト ファイルを作成することを指摘しました。

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

また、パス内のスペースの問題を提起してくれた erichui に感謝します。

于 2008-09-12T02:42:06.047 に答える
7

これは、バックティック ソリューションと同等です。

ls > $(pwd).txt
于 2008-09-12T02:57:52.420 に答える
6

あなたが言ったことを文字通り行うには、次のことを試すことができます。

ls > `pwd`.txt

これは完全なパス名を使用しますが、これで問題ありません。/home/hoboben にある可能性のあるホーム ディレクトリでこれを行う場合は、上記のディレクトリにテキスト ファイルである /home/hoboben.txt を作成しようとすることに注意してください。

これはあなたが望んでいたものですか?

ディレクトリに名前の付いたファイルを含める場合は、現在のディレクトリのベース名を取得し、.txt を使用して pwd に追加します。

さて、pwd コマンドを使用するのではなく、PWD 環境変数を使用してみませんか?

例えば:

ls > $PWD.txt

また

ls > ${PWD}.txt

おそらく、2番目の例で覚えようとしていたことです。

/home/hoboben にいて、/home/hoboben/hoboben.txt を作成したい場合は、以下を試してください:

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

これを行うと、ファイルには独自の名前が含まれるため、ほとんどの場合、いくつかの方法のいずれかでこれを修正します。-a フラグを使用しない限り、別の場所にリダイレクトしてファイルを移動するか、ドットで始まるファイルに名前を付けて ls コマンドから非表示にすることができます (オプションで、結果のファイルの名前を変更します)。

私は独自のスクリプトを作成して音楽ファイルのディレクトリ階層を管理し、たとえば「.info」という名前のサブディレクトリを使用して、いくつかのスペア ファイルにトラック データを格納します (基本的に、この方法でメタデータを「非表示」にします)。私のニーズは単純で、私のコレクションは小さいので、うまくいきます。

于 2008-09-12T02:53:16.910 に答える
5

ディレクトリ名の 1 つにスペースが含まれている可能性があると思われます。たとえば、作業ディレクトリが「/home/user/music/artist name」の場合。Bash は、/home/user/music/artist および name.txt にリダイレクトしようとしていると考えて混乱します。これは二重引用符で修正できます

ls > "$(pwd).txt"

また、$(pwd).txt にリダイレクトしたくない場合もあります。上記の例では、出力をファイル「/home/user/music/artist name.txt」にリダイレクトします。

于 2008-09-12T02:59:47.720 に答える
4

構文は次のとおりです。

ls > `pwd`.txt

通常の一重引用符ではなく、'~' の下にある '`' 文字です。

于 2008-09-12T02:42:57.590 に答える
2

上記の方法を使用すると、現在のディレクトリの 1 レベル上にファイルが作成されます。プレイ リストをすべて 1 つのディレクトリに移動する場合は、次のようにする必要があります。

#!/bin/sh

MYVAR=`pwd | sed "s|/|_|g"`
ls > /playlistdir/$MYVAR-list.txt
于 2008-09-12T02:53:57.717 に答える