我有几个视频文件,其中包含转义字符,例如 [ 与 [1920x1080] 的组合。当我执行:
find /run/media/user/usbdisk -type f -iname [HD, 1920x1080] - Wild Wild West.mp4 -ls
然后我收到如下错误:
find:paths must precede expression
当我执行时
find /run/media/user/usbdisk -type f -iname "[HD, 1920x1080] - Wild Wild West.mp4" -ls
尽管我确信该文件存在,但我没有得到任何结果。
执行时结果相同(未找到任何内容):
find /run/media/user/usbdisk -type f -iname '[HD, 1920x1080] - Wild Wild West.mp4' -ls
为了接收电影的目录名称(basename),我将名称存储在名为 video 的变量中,以便我的命令最终如下所示:
dname=$(find /run/media/user/usbdisk -type f -iname "$video" -exec dirname {} \;)
但这会导致错误结果(见上文)。
我怎样才能让 find 命令(或任何其他命令)准确找到我确切命名的文件(包括转义符号)?有什么方法或有必要替换文件名中的转义符号吗?我想避免这种情况。提前谢谢您。
答案1
-iname
评估其参数,*
并且?
对其[]
具有特殊含义,因此如果您想按字面意思传递它们,则必须对它们进行转义。
-quit
如果您在不同的文件夹中找到两个或多个文件(重复?),请考虑使用。我猜您希望dname
使用单个目录名。
据我了解$video
已经给出:
video="[HD, 1920x1080] - Wild Wild West.mp4"
在这种情况下尝试:
video1=$(echo $video | sed 's|\[|\\[|g; s|\]|\\]|g')
dname=$(find /run/media/user/usbdisk -type f -iname "$video1" -exec dirname {} \; -quit)
这可以在一行中完成。为了清晰起见,我选择引入额外的变量。