我需要从?
一堆名称如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 中一样,唯一的区别是 ' ?
' 默认表示每个字符。反斜杠(' \
')用于删除此特殊含义。