2014-09-12 41 views
2
$ ls -l 
[email protected] 1 ywang Users 6156 Aug 16 14:38 -STEST.20140728.151116.pgp 
[email protected] 1 ywang Users 2756 Aug 16 14:38 -STEST.20140728.152042.pgp 
[email protected] 1 ywang Users 3424 Aug 16 14:38 -STEST.20140729.141735.pgp 
[email protected] 1 ywang Users 2439 Aug 16 14:38 -STEST.20140729.142515.pgp 
[email protected] 1 ywang Users 2672 Aug 16 14:38 -STEST.20140730.125115.pgp 
[email protected] 1 ywang Users 2391 Aug 16 14:38 -STEST.20140730.125556.pgp 

嗨,我已经尝试了多种方式,例如,循环浏览文件并逐个执行mv。然而,我并不成功,因为mv将前导破折号解释为自身的参数,并且在与通配符*合并时似乎不能使用反斜杠转义。Bash删除文件名中的前导破折号

任何想法如何可以在Bash的oneliner中完成?谢谢!

+0

不bash,但它解决了你的问题:http://search.cpan.org/~pederst/rename/。 '重命名s/^ - // - *'(未经测试)。而且,大多数命令都用'--'来表示选项的结束,所以你可以将它们用于以'-'开头的文件。 'mv - -blah blah'。 – jpkotta 2014-09-12 17:54:12

回答

5

您可以使用:

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

它使用./-*为通配符,使外壳不解释-为命令选项是非常重要的。

相关问题