重命名文件 Mac 命令行

4
我有一堆文件在一个目录中,它们的命名方式非常不幸。我想要更改名称中的两个字符。
例如,我有这样一个文件: >ch:sdsn-sdfs.txt
我想要删除 ">" 并将 ":" 更改为 "_"
所以变成:
ch_sdsn-sdfs.txt
我试图直接运行 "mv \\>ch\:* ch_*" 命令但是失败了。是否有简单的解决方案?

请查看此问题 - Thomas Ayoub
请尝试在文件名周围添加双引号! - bikram990
@Samoth 谢谢,我一直在寻找答案,但这个从未出现过。您想把它作为答案放上来,然后我可以选择吗? - Stephopolis
2个回答

11

对于命令行脚本进行重命名,这个stackoverflow问题有很好的答案。

对于Mac,在GUI中,Finder带有批量重命名功能。如果源文件列表具有某些要查找和替换的模式,则非常方便。

选择需要替换的所有文件,右键单击并选择重命名 输入图像描述

在重命名时,输入查找和替换字符串 输入图像描述

重命名中的其他选项,以对文件名进行排序: 输入图像描述

添加前缀或后缀文本: 输入图像描述


哇,我知道这不是答案,但你让我大开眼界!我从来不知道我可以做到这个!谢谢! - Myoch

7

首先,我应该说最简单的方法是使用prename或rename命令。

Homebrew软件包renameMacPorts软件包renameutils

rename s/0000/000/ F0000*

这比等效的sed命令更容易理解。

但是要理解sed命令,可以查看sed手册。如果运行man sed并搜索&(使用/命令搜索),您将发现它是s/foo/bar/替换中的特殊字符。

  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引用。
替换字符串使用&(原始文件名)和\1\2,即文件名的每个部分,除了第二个字符(0)以外的部分。
在我看来,这是一种相当神秘的方法。如果由于某些原因无法使用rename命令,并且您想要使用sed进行重命名(或者可能正在做一些过于复杂的操作),则更明确地编写您的正则表达式将使其更易读。也许像这样:
ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh

能够看到实际变化的内容,使得代码更易读。此外,如果不小心运行两次或其他情况下,它也不会从文件名中吞噬字符。


遗憾的是,renameutils MacPort 没有包括 rename 命令!https://trac.macports.org/ticket/24525 不过还是非常好的答案。 - Anthony Hepple

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接