我有一个包含以下文件的目录:
-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
依此类推......
如何才能发挥作用?
答案 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指出它。