批量重命名“案例重复项”

批量重命名“案例重复项”

我的 Linux 系统上有一个文件夹,它与其他计算机(其中一些与 Windows)交叉同步。问题是,在该文件夹中存在“大小写重复”的文件,即它们的文件名相同,只是一个或多个字符是大写与小写。对于 Linux 系统来说这不是问题,但对于 Windows 系统来说却是问题,并且它会抱怨文件名重复。

是否有一种简单的命令行方法来查找和替换此类文件名,例如“将所有文件名转换为小写,如果这导致两个同名文件将“1”附加到其中一个文件”?

答案1

如果您想避免重新发明轮子,您可以使用该mv命令的内置功能来执行自动编号备份;如果您的 shell 本身支持大小写转换,那么可能很简单

for f in *; do mv --backup=numbered -- "$f" "${f,,}"; done

默认备份编号格式为.~1~,例如给出

SOME FILE  sOmE fIlE  some file

然后

$ for f in *; do mv -v --backup=numbered -- "$f" "${f,,}"; done
‘SOME FILE’ -> ‘some file’ (backup: ‘some file.~1~’)
‘sOmE fIlE’ -> ‘some file’ (backup: ‘some file.~2~’)
mv: ‘some file’ and ‘some file’ are the same file

如果您不喜欢默认编号,您可以随时更改它;如果您的系统包含基于 perl 的rename命令,可能类似于

$ rename -v -- 's/\.~(\d+)~/$1/' *.~*~
some file.~1~ renamed as some file1
some file.~2~ renamed as some file2

终于给予

$ ls
some file  some file1  some file2

相关内容