如何从Bash中的文件名中删除前导破折号

时间:2016-10-24 20:08:01

标签: bash rename

我有一个包含以下文件的目录:

-001.jpg
-002.jpg
...
-100.jpg

我想删除每一个的主要短划线。

我试过了:

rename -vn 's/^-//g' *

但我明白了:

Unknown option: 0
Unknown option: 0
Unknown option: 0
Unknown option: .
Unknown option: j
Unknown option: p
Unknown option: g
Unknown option: 0
Unknown option: 0

依此类推......

如何才能发挥作用?

2 个答案:

答案 0 :(得分:6)

-被视为rename命令的选项。

您可以像这样使用rename

rename -vn -- 's/^-//' *

答案 1 :(得分:2)

只有shell参数扩展,没有外部工具:

shopt -s nullglob
for f in *.jpg; do mv -- "$f" "${f#-}"; done

nullglob shell选项可确保*.jpg无法扩展到任何内容,如果它不匹配任何文件; "${f#-}"扩展为f中存储的文件名减去前导连字符。

mv --是必要的,以防止将文件名解释为mv的选项。

并非mv的所有版本都将--理解为选项的分隔符。就像我所看到的那样,例如POSIX不需要它。一个更便携的版本是使用

for f in *.jpg; do mv "./$f" "./${f#-}"; done

代替。帽子提示Gordon Davisson指出它。