题
要为文件夹中的所有音乐创建播放列表,我在 bash 中使用以下命令:
ls > list.txt
我想使用的结果 密码 (打印工作目录)播放列表名称的命令。
就像是:
ls > ${pwd}.txt
但这不起作用 - 谁能告诉我需要使用什么语法来完成这样的事情?
编辑: 正如评论中提到的,pwd 最终将给出绝对路径,因此我的播放列表最终将在某个目录中被命名为 .txt - d'oh!所以我必须修剪路径。感谢您发现这一点 - 我可能会花很长时间想知道我的文件去了哪里!
其他提示
这相当于反引号解决方案:
ls > $(pwd).txt
要按照你所说的去做,你可以尝试:
ls > `pwd`.txt
它将使用完整路径名,这应该没问题。请注意,如果您在可能位于 /home /hoboben的主目录中执行此操作,则将尝试使用CREATE /HOME /HOBOBEN.TXT,这是上面目录中的文本文件。
这是你想要的吗?
如果您希望该目录包含以其命名的文件,则将获得当前目录的Basename,并将其附加到PWD上。
现在,不要使用 pwd 命令......为什么不使用 PWD 环境变量?
例如:
ls > $PWD.txt
或者
ls > ${PWD}.txt
可能就是您在第二个示例中试图记住的内容。
如果您位于 /home/hoboben 并且想要创建 /home/hoboben/hoboben.txt,请尝试:
ls > ${PWD}/${PWD##*/}.txt
如果您这样做,该文件将包含自己的名称,因此大多数情况下,您可以通过以下几种方法之一来解决此问题。只要不使用 -a 标志(然后可以选择重命名生成的文件),您就可以重定向到其他位置并移动文件或以点开头命名文件,以将其隐藏在 ls 命令中。
我编写自己的脚本来管理音乐文件的目录层次结构,并使用名为“.info”的子目录,例如,在一些备用文件中包含曲目数据(基本上,我通过这种方式“隐藏”元数据)。效果还不错,因为我的需求很简单,而且我的收藏很少。
我怀疑问题可能是其中一个目录名称中有空格。例如,如果您的工作目录是“/home/user/music/artist name”。Bash 会很困惑,认为您正在尝试重定向到 /home/user/music/artist 和 name.txt。您可以用双引号解决此问题
ls > "$(pwd).txt"
另外,您可能不想重定向到 $(pwd).txt。在上面的示例中,您会将输出重定向到文件“/home/user/music/artist name.txt”
语法是:
ls > `pwd`.txt
这是“~”下面的“`”字符,而不是常规的单引号。
使用上述方法将创建当前目录上一级的文件。如果您希望播放列表全部进入一个目录,您需要执行以下操作:
#!/bin/sh
MYVAR=`pwd | sed "s|/|_|g"`
ls > /playlistdir/$MYVAR-list.txt
删除除目录名称之外的所有内容
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