批量删除Bash中文件名中的前导破折号

时间:2014-09-12 15:29:55

标签: bash batch-rename

$ ls -l
-rw-r--r--@ 1 ywang  Users  6156 Aug 16 14:38 -STEST.20140728.151116.pgp
-rw-r--r--@ 1 ywang  Users  2756 Aug 16 14:38 -STEST.20140728.152042.pgp
-rw-r--r--@ 1 ywang  Users  3424 Aug 16 14:38 -STEST.20140729.141735.pgp
-rw-r--r--@ 1 ywang  Users  2439 Aug 16 14:38 -STEST.20140729.142515.pgp
-rw-r--r--@ 1 ywang  Users  2672 Aug 16 14:38 -STEST.20140730.125115.pgp
-rw-r--r--@ 1 ywang  Users  2391 Aug 16 14:38 -STEST.20140730.125556.pgp

嗨,我尝试了多种方法,例如:循环遍历文件并逐个执行mv。但是,我并不成功,因为需要注意的是mv将前导破折号解释为自身的参数,并且当与通配符*结合使用时,反斜杠转义似乎不起作用。

有什么想法可以在Bash的oneliner中完成吗?谢谢!

1 个答案:

答案 0 :(得分:5)

您可以使用:

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

./-*用于globbing非常重要,这样shell就不会将-解释为命令选项。