我正在尝试重命名一个文件,其名称开头带有连字符,并且同时包含以下内容:
mv -example-file-name example-file-name
和这个:
mv '-example-file-name' example-file-name
导致:
mv: invalid option -- 'e'
答案1
大多数 GNU/Linux 命令允许使用--
选项来指示选项的结束,以便后续的-
前缀词不会被视为选项。
mv -- -example-file-name example-file-name
一个小测试
$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$
答案2
RedGrittyBrick 的答案非常好。另一个选择是:
mv ./-example-file-name example-file-name
一个小测试:
$ touch ./-example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./-example
$ mv ./-example example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./example
答案3
在绝望的时候,这个技巧对我很有用。YMMV
rename \- '' *
您必须转义连字符才能识别重命名。为什么重命名不尊重单引号或提供某种覆盖,这让我无法理解。
这是我见过的唯一一种使用 rename 可靠地处理前导连字符的方法。我同意其他关于使用 mv 的帖子,但如果您出于某种原因不能使用 mv,这种方法是可行的。
答案4
你可以使用这个:
rename -- "s/\-//g" *
它可以重命名所有文件:)如果您的文件名:
-ng--sh-ay-01[------------]-FLV
运行代码后,您的文件名变为:
ngshay01[]FLV