要为文件夹中的所有音乐创建播放列表,我在bash中使用以下命令:
ls > list.txt
我想使用pwd
命令的结果作为播放列表的名称。
就像是:
ls > ${pwd}.txt
但这不起作用-谁能告诉我我需要使用什么语法来执行类似的操作?
编辑:如评论中所述,pwd将最终给出绝对路径,因此我的播放列表将最终在某些目录中被命名为.txt-d'哦!所以我必须修剪路径。感谢您发现-我可能花了很长时间才想知道我的文件在哪里!
Answers:
最好的方法是使用"$(command substitution)"
(感谢Landon):
ls > "$(pwd).txt"
有时您还会看到人们使用较旧的反引号表示法,但这在嵌套和转义方面有一些缺点:
ls > "`pwd`.txt"
请注意,未经处理的替换pwd
是绝对路径,因此上述命令在与工作目录相同的目录中创建具有相同名称的文件,但具有.txt
扩展名。Thomas Kammeyer指出,该basename
命令将剥离前导目录,因此这将在当前目录中创建一个文本文件,并带有该目录的名称:
ls > "$(basename "$(pwd)").txt"
也感谢erichui提出了路径中的空间问题。
按照字面意思做,您可以尝试:
ls > `pwd`.txt
它将使用完整的路径名,应该没问题。请注意,如果您在主目录(可能位于/ home / hoboben中)中执行此操作,则将尝试在上面目录中创建一个文本文件/home/hoboben.txt。
这就是你想要的吗?
如果您希望目录包含以该目录命名的文件,则将获取当前目录的基本名称,并将其后缀.txt附加到pwd。
现在,而不是使用pwd命令...为什么不使用PWD环境变量?
例如:
ls > $PWD.txt
要么
ls > ${PWD}.txt
您可能想在第二个示例中记住的内容。
如果您在/ home / hoboben中,并且想要创建/home/hoboben/hoboben.txt,请尝试:
ls > ${PWD}/${PWD##*/}.txt
如果执行此操作,则文件将包含其自己的名称,因此通常,您可以通过以下几种方式之一对此名称进行补救。只要不使用-a标志(然后可以选择重命名结果文件),就可以重定向到其他位置并以点开头移动该文件或命名该文件,以使其对ls命令隐藏。
我编写了自己的脚本来管理音乐文件的目录层次结构,并且使用了名为“ .info”的子目录来将曲目数据包含在一些备用文件中(基本上,我是通过这种方式“隐藏”元数据)。可以,因为我的需求很简单,而且我的收藏很小。
除去目录名称以外的所有内容
ls >/playlistdir/${PWD##/*}.txt
这可能不是您想要的,因为那样您就不知道文件在哪里(除非您更改ls命令)
用“ _”替换“ /”
ls >/playlistdir/${PWD//\//_}.txt
但是播放列表看起来很难看,甚至可能不适合选择窗口
因此,这将为您提供一个简短的可读名称和文件内的可用路径
ext=.mp3 #leave blank for all files
for FILE in "$PWD/*$ext"; do echo "$FILE";done >/playlistdir/${PWD##/*}.txt