我有一个处理文件的bash脚本。它find
是一个目录中的所有文件,并在另一个目录中搜索每个文件的名称。为此,它使用
"${myfiletobesearched}"
在脚本中。但是,如果文件名包含[或],即使该文件也存在副本,脚本也不会在第二个目录中找到它。我该怎么办,以使文件名被识别为相同?
我能够将问题缩小为一个例子。
myfile="My File [Official Awesome File].txt"
find ./ -name "${myfile}" -type f
不会给出任何输出,即使有一个具有该名称的文件也是如此。编写\[
或类似的东西当然不是一种选择,因为myfile
它来自检查目录。
这是脚本:https : //gist.github.com/Make42/5bdae5e4de32cff0d01c9486b09383ee
myfile="My File [Official Awesome File].txt"
myfile=$(echo $myfile | sed -r 's/(\[|\])/\\\1/g')
find ./ -name "${myfile}" -type f
你能检查一下是否行得通吗?
我期待这会改变的值myfile
来
myfile="My File \[Official Awesome File\].txt"
更好的方法是使用printf
:
myfile=$(printf '%q\n' "$myfile")
在您的特定示例中find
,将是:
find ./ -name "$(printf '%q\0' "$myfile")" -type f
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句