如何在文件名(也是子目录)中用一个 space 替换双 space(CloudLinux 服务器版本 6.10)

How to replace double spaces with one space in filenames (also subdirectories) (CloudLinux Server release 6.10)

我想将很多照片的文件名中的双 space 替换为一个 space。这些照片位于目录 /foto 及其子文件夹中。这该怎么做?例如 "photo 1.jpg" 需要变成 "photo 1.jpg"

最好的方法是使用命令行,因为它在 CloudLinux 服务器上。 (超过 50GB 的照片)。我在 Whosebug 上搜索了这里,还 Google 找到了我需要的命令。我想 rename 是要使用的,或者 mv.

我发现的唯一东西是关于替换 space 和替换其他符号的命令,但不是关于双(多)spaces 的命令。

使用这个,使用 Perl 的重命名:

rename 's/\s{2}/ /g' files*

当输出看起来不错时删除 -n 开关。

有其他同名工具可能无法做到这一点,所以要小心。

如果你运行以下命令(GNU)

$ file "$(readlink -f "$(type -p rename)")"

并且您的结果包含 Perl script, ASCII text executable 而不包含 ELF,那么这似乎是正确的工具 =)

如果不是,将其设为 Debian 的默认值(通常已经是这种情况)和 Ubuntu 等衍生产品:

$ sudo update-alternatives --set rename /path/to/rename

/path/to/rename 替换为 perl rename 可执行文件的路径。


如果你没有这个命令,搜索你的包管理器来安装它或者do it manually(没有依赖...)


这个工具最初是由 Perl 之父 Larry Wall 编写的。

find -iname \*.* | rename -v "s/\s{2}/ /g"

这是帮助我解决问题的最后一条命令。我使用了 perl 重命名,请参阅 Gilles

的回答