Maa*_*eDa 4 bash special-characters find
背景:我正在尝试查找 xml 文件中提到的音乐文件来组织我的音乐播放列表。我正在编写一个脚本来从 xml 标记中提取文件名以自动查找文件。
我的音乐存在于$musicroot,所以我find在那里发行。但由于字符的原因我找不到以下文件[]。
find $musicroot -name "R. Kelly - Step In The Name Of Love [mp3clan.com].mp3" -type f
Run Code Online (Sandbox Code Playgroud)
什么都不返回,但如果我转义,[]那么它就可以工作。
find $musicroot -name "R. Kelly - Step In The Name Of Love \[mp3clan.com\].mp3" -type f
/mnt/Data/Dynamic/Multimedia/Music/Not Desi/Party/R. Kelly - Step In The Name Of Love [mp3clan.com].mp3
Run Code Online (Sandbox Code Playgroud)
请注意,在我的脚本中,歌曲文件在歌曲循环中迭代并存在于变量 中$song。不确定这是否有影响。
我真的希望能够将文件名传递到find我的脚本中,而不必担心像这样的转义字符,但我似乎无法在网上找到任何内容。find可能是因为find 是一个很常见的英语单词,所以很难搜索。
这可能吗?
如果您只是寻找此文件,则可以仅使用 bash 来完成:
shopt -s globstar
printf "%s\n" "$musicroot"/**/"R. Kelly - Step In The Name Of Love [mp3clan.com].mp3"
Run Code Online (Sandbox Code Playgroud)
在 bash 中,globstar允许使用**进行递归通配。当然,一旦文件名用引号引起来,bash 就不会对其进行进一步的通配符扩展(因此,您$musicroot也应该引用)。