我在一个目录中有一堆文件,这些文件是用不太令人遗憾的名字制作的。我想更改名称中的两个字符。 例如,我有:
> CH:sdsn-sdfs.txt
我要删除“>”并将“:”更改为“_”。
导致
ch_sdsn-sdfs.txt
我试着说mv \\>ch\:* ch_*
,但那不起作用
有一个简单的解决方案吗?
答案 0 :(得分:7)
对于要重命名的命令行脚本,this stackoverflow question有很好的答案。
对于Mac,在GUI中,Finder具有批量重命名功能。如果文件的源列表有一些模式可供查找&替换,它非常方便。
答案 1 :(得分:6)
首先,我应该说最简单的方法是使用 预名或重命名命令。
自制软件包rename
, MacPorts包:renameutils
rename s/0000/000/ F0000*
这比同等的sed命令更容易理解。
但是至于理解sed命令,sed联机帮助页很有帮助。如果 你运行man sed并搜索& (使用/命令进行搜索), 你会发现它是s / foo / bar / replacementments中的一个特殊字符。
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
引用。
然后.
匹配下一个字符,该字符始终为0。
然后\(.*\)
匹配文件名的其余部分,可由\2
引用。
替换字符串使用&
(原始字符串)将它们放在一起
filename)和\1\2
,除了第二个文件名,它是文件名的每个部分
字符,这是一个0。
这是一个非常神秘的方式,恕我直言。如果是的话 某些原因,重命名命令不可用,你想使用 sed做重命名(或者你做的事情太复杂了 对于重命名?),在你的正则表达式中更加明确会使它变得更多 更具可读性。也许是这样的事情:
ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh
能够看到实际发生了什么变化 s / search / replacement /使其更具可读性。它也不会保留 如果你意外地运行它,就会从你的文件名中吸出字符 两次或者其他什么。