我有一堆文件在一個目錄中生成相當不幸的名字。我想更改名稱中的兩個字符。 比如我有:重命名文件的Mac命令行
> CH:sdsn-sdfs.txt
,我想刪除 「>」,改變 「:」 到 「_」。
在
ch_sdsn-sdfs.txt所得
我試過,只是說mv \\>ch\:* ch_*
,但沒有奏效。
有沒有簡單的解決方案呢?
我有一堆文件在一個目錄中生成相當不幸的名字。我想更改名稱中的兩個字符。 比如我有:重命名文件的Mac命令行
> CH:sdsn-sdfs.txt
,我想刪除 「>」,改變 「:」 到 「_」。
在
ch_sdsn-sdfs.txt所得
我試過,只是說mv \\>ch\:* ch_*
,但沒有奏效。
有沒有簡單的解決方案呢?
首先,我應該說最簡單的方法是使用 預先命名或重命名命令。
自制包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 /搜索/替換實際改變/使它更具可讀性。如果你不小心運行它 兩次或其他東西,它不會保持 吮吸你的文件名中的字符。
可悲的是,renameutils MacPort不包含'rename'命令! https://trac.macports.org/ticket/24525很好的答案。 –
對於要重命名的命令行腳本,this stackoverflow question有很好的答案。
對於Mac,在GUI中,Finder具有批量重命名功能。如果源文件列表有一些模式可以找到&替換,它非常方便。
看到這個[問題](http://stackoverflow.com/questions/2372719/using-sed-to-mass-rename-files) –
嘗試向文件名添加雙引號! – bikram990
@Samoth謝謝,我一直在尋找答案,但這個從來沒有出現。你想把這個作爲答案,我可以選擇它嗎? – Stephopolis