查找文件明确包含转义符号(如 ]、- 空格)的目录

查找文件明确包含转义符号(如 ]、- 空格)的目录

我有几个视频文件,其中包含转义字符,例如 [ 与 [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)

这可以在一行中完成。为了清晰起见,我选择引入额外的变量。

相关内容