无法重命名以连字符开头的文件


37

我正在尝试使用名称的开头和两者之间的连字符重命名文件:

mv -example-file-name example-file-name

和这个:

mv '-example-file-name' example-file-name

导致:

mv: invalid option -- 'e'

1
使用文件的相对路径(./tmp/-example),完整路径(/ home / a / tmp / -example)或告诉mv您已经用-提供了选项,下面是文件名称。
ЯрославРахматуллин

万一有人怀疑:mv *example-file-name example-file-name会有同样的问题,因为文件名扩展(又名glob)在mv调用之前发生。
Walter Tross

Answers:


53

大多数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
$

这也解决了相同的问题rename。(至少是像这样的版本rename [options] <expression> <replacement> <file>...,无论哪个版本都可以。)
underscore_d

该死的,BSD / Mac OS X mv没有这个:(
Sridhar Sarnobat

18

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

非常好的解决方法,这对我来说从未发生过。与已接受的答案不同,这将适用于BSD / Mac OS X
Sridhar Sarnobat

多数民众赞成在比--
科尼

-1

您可以使用此:

rename -- "s/\-//g" *

它可以重命名所有文件:)如果您的文件名:

-ng--sh-ay-01[------------]-FLV

运行代码后,您的文件名变为:

ngshay01[]FLV

1
其他方法(由RedGrittyBrick和gniourf_gniourf编写的方法)更可能与其他几个命令一起使用。
TOOGAM 2015年

-1

在绝望的时候,这个技巧对我有用。青年汽车

rename \- '' *

您必须对连字符进行转义才能重命名才能识别它。为什么重命名不尊重单引号或提供某种形式的覆盖超出了我的范围。

这是我见过的唯一一种使用重命名可靠地处理前导连字符的方法。我同意使用mv的其他文章,但是如果您由于某种原因不能使用mv,则可以使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.