2014-02-26 164 views
2

我有一堆文件在一個目錄中生成相當不幸的名字。我想更改名稱中的兩個字符。 比如我有:重命名文件的Mac命令行

> CH:sdsn-sdfs.txt

,我想刪除 「>」,改變 「:」 到 「_」。

ch_sdsn-sdfs.txt所得

我試過,只是說mv \\>ch\:* ch_*,但沒有奏效。
有沒有簡單的解決方案呢?

+0

看到這個[問題](http://stackoverflow.com/questions/2372719/using-sed-to-mass-rename-files) –

+0

嘗試向文件名添加雙引號! – bikram990

+0

@Samoth謝謝,我一直在尋找答案,但這個從來沒有出現。你想把這個作爲答案,我可以選擇它嗎? – Stephopolis

回答

6

首先,我應該說最簡單的方法是使用 預先命名或重命名命令。

自制包rename MacPorts的包 renameutils

rename s/0000/000/ F0000* 

這是一個很大比同等sed命令更容易理解。

但至於理解sed命令,sed手冊頁是有幫助的。如果 運行man sed並搜索&(使用/命令進行搜索), 您會發現它是s/foo/bar/replacement中的特殊字符。

s/regexp/replacement/ 
     Attempt to match regexp against the pattern space. If success‐ 
     ful, replace that portion matched with replacement. The 
     replacement may contain the special character & to refer to that 
     portion of the pattern space which matched, and the special 
     escapes \1 through \9 to refer to the corresponding matching 
     sub-expressions in the regexp. 

因此,\(.\)的第一個字符,這可以通過\1引用匹配。 Then .與下一個字符匹配,該字符總是0. 然後\(.*\)與文件名的其餘部分匹配,可以通過\2引用。

替換字符串把它一起使用&(原 文件名)和\1\2這是不同的是二次 字符,這是一個0

這是一個非常神祕的方式對文件名的每一個部分做這個,恕我直言。如果 某些原因,重命名命令不可用,你想用 sed的做重命名(或者也許你正在做一些太複雜 要重命名的?),是在你的正則表達式更明確將使它更 更具可讀性。也許是這樣的:

ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh 

能夠看到什麼在 S /搜索/替換實際改變/使它更具可讀性。如果你不小心運行它 兩次或其他東西,它不會保持 吮吸你的文件名中的字符。

+0

可悲的是,renameutils MacPort不包含'rename'命令! https://trac.macports.org/ticket/24525很好的答案。 –

6

對於要重命名的命令行腳本,this stackoverflow question有很好的答案。

對於Mac,在GUI中,Finder具有批量重命名功能。如果源文件列表有一些模式可以找到&替換,它非常方便。

選擇所有需要被替換的文件,點擊右鍵,選擇重命名 enter image description here

在重新命名,輸入查找和替換字符串 enter image description here

在重命名的其他選項,測序的文件名: enter image description here

爲前綴或後綴文本: enter image description here