从目录中的文件名中删除 GET 参数

从目录中的文件名中删除 GET 参数

我需要从?一堆名称如image.jpg?foo=bar&bar=foo.有人可以告诉我它是如何完成的吗?

由于某些原因这些命令不起作用:

rename "\?." "" *
rename 's/(.*)\.jpg\?.*/$1\.jpg/' *

答案1

这很简单:

我们正在对每个名称包含“ ”的文件进行 for 循环?

这个 for 循环mv对所有这些文件调用 (== rename) 命令,这些文件名中没有“ ”之后的部分?

确切的命令如下:

for i in *\?*;do mv -vf "${i}" "${i%%\?*}";done

这看起来可能有点神秘,是"${i%%\?*}".这意味着:“名为‘i’的变量从其尾部删除了‘ ?’之后的所有内容。

还有一个有点神秘的东西,那就是部分*\?*。它表示当前目录中名称包含“ ?”的每个文件。这是一个模式,就像 (win)do(w)s 中一样,唯一的区别是 ' ?' 默认表示每个字符。反斜杠(' \')用于删除此特殊含义。

相关内容