重命名文件Mac命令行

时间:2014-02-26 16:03:42

标签: regex macos file

我在一个目录中有一堆文件,这些文件是用不太令人遗憾的名字制作的。我想更改名称中的两个字符。 例如,我有:

  

> CH:sdsn-sdfs.txt

我要删除“>”并将“:”更改为“_”。

导致

  

ch_sdsn-sdfs.txt

我试着说mv \\>ch\:* ch_*,但那不起作用 有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:7)

对于要重命名的命令行脚本,this stackoverflow question有很好的答案。

对于Mac,在GUI中,Finder具有批量重命名功能。如果文件的源列表有一些模式可供查找&替换,它非常方便。

选择需要替换的所有文件,右键单击并选择重命名 enter image description here

在重命名时,输入find和replace string enter image description here

重命名中的其他选项,用于对文件名进行排序: enter image description here

要添加前缀或后缀文字: enter image description here

答案 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 /使其更具可读性。它也不会保留 如果你意外地运行它,就会从你的文件名中吸出字符 两次或者其他什么。