2014-09-12 62 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 

它使用./-*爲通配符,使外殼不解釋-爲命令選項是非常重要的。