用终端替换文件名中的所有冒号

Rya*_*ure 14 command-line rename

我的硬盘上有 1 GB 的音乐,是用 EXT4 格式化的。我想将这些文件移动到 FAT 格式的硬盘分区。但是,我无法移动我的大部分文件,因为它们的名称中有“:”(例如,歌剧的“第 2 幕:.....”)。有没有办法通过命令行将我的所有文件从“XXXX:XXXX”重命名为“XXXX-XXXX”?

小智 28

如果所有文件都在一个目录中,请尝试:

rename 's|:|-|g' *
Run Code Online (Sandbox Code Playgroud)

(如果您愿意,可以将 * 更改为更具限制性的内容)

如果目录树中有很多文件,请从树的底部尝试:

find . -name "*:*" -exec rename 's|:|-|g' {} \;
Run Code Online (Sandbox Code Playgroud)

您可以在-n之后rename立即添加选项,让它告诉您它会做什么,而无需实际执行。这可能会帮助您避免意外踩到其他文件或其他不好的东西...

  • 单目录解决方案将起作用,但如果目录本身的名称中包含 :s,则嵌套解决方案将不起作用。这是因为在“find .”的输出中,子目录的名称位于其内容之前。因此,如果您有一个文件“/1:/2:”,则第一个“/1:/”将被重命名为“/1-/”。现在您无法将“/1:/2:”重命名为“/1-/2-”,因为“/1:/2:”不存在。 (2认同)
  • 对于目录:`find . -type d -read -writable -exec rename 's|:|-|g' {} \;` 然后是 files: `find . -type f -read -writable -exec rename 's|:|-|g' {} \;` (2认同)