Linux下实现类Windows复制效果:忽略文件名大小写重名自动覆盖
Linux下复制文件忽略大小写、覆盖大小写不同重名文件的方案
Linux原生文件系统默认是大小写敏感的,要实现和Windows一致的大小写不敏感复制效果(重名但大小写不同的文件直接覆盖,不生成新文件),可以通过以下三种方案实现,均适配Wine/Proton游戏MOD安装场景:
方案1:自定义Bash脚本实现(通用性最强,无需修改系统配置)
适合临时使用,脚本会自动在目标目录匹配和源文件名小写一致的已有文件,匹配到直接覆盖,未匹配到则正常复制。
- 将以下代码保存为
cpnocase.sh:
#!/bin/bash src="$1" dest="$2" # 处理目标为目录的场景 if [ -d "$dest" ]; then src_file=$(basename "$src") src_lower=$(echo "$src_file" | tr '[:upper:]' '[:lower:]') # 遍历目标目录匹配小写文件名 for exist_file in "$dest"/*; do exist_file_lower=$(basename "$exist_file" | tr '[:upper:]' '[:lower:]') if [ "$src_lower" = "$exist_file_lower" ]; then cp -f "$src" "$exist_file" exit 0 fi done # 无匹配则正常复制 cp -f "$src" "$dest/" else # 目标为文件直接覆盖 cp -f "$src" "$dest" fi
- 给脚本添加执行权限:
chmod +x cpnocase.sh - 复制时执行命令即可:
./cpnocase.sh 源文件路径 目标目录/文件路径
批量复制时可套入for循环处理多个源文件。
方案2:挂载游戏目录为大小写不敏感(固定游戏目录首选,一劳永逸)
仅需要对游戏所在目录设置大小写不敏感属性,设置完成后所有复制操作自动适配Windows逻辑,无需额外工具,最适配MOD安装的固定场景。
要求Linux内核版本5.2及以上(当前主流发行版均满足),操作步骤:
- 卸载游戏目录所在分区(普通未单独挂载的目录可跳过此步):
umount /path/to/your/game/dir - 给分区开启大小写折叠功能:
tune2fs -O casefold /dev/sdXn,将/dev/sdXn替换为游戏目录所在的分区设备名 - 重新挂载分区并添加casefold参数:
mount -o casefold /dev/sdXn /path/to/your/game/dir - 给游戏目录单独开启大小写不敏感属性:
chattr +F /path/to/your/game/dir - 如需永久生效,将
casefold参数添加到/etc/fstab对应分区的挂载参数列即可。
设置完成后,使用系统自带的cp命令、文件管理器执行复制操作,都会自动忽略大小写覆盖重名文件,和Windows的复制行为完全一致。
方案3:使用rsync命令实现(无需额外配置,适合临时批量操作)
rsync自带忽略大小写匹配参数,一行命令即可完成批量MOD复制,无需写脚本或修改系统配置:
- 基础复制命令:
rsync -av --ignore-case 源MOD目录/ 目标游戏目录/ - 如需同步删除目标目录中源目录不存在的冗余文件,可添加
--delete参数:rsync -av --ignore-case --delete 源MOD目录/ 目标游戏目录/
参数说明:
--ignore-case:文件匹配时忽略大小写-a:保留文件权限、时间戳等属性,不会破坏游戏原有文件的运行要求
内容的提问来源于stack exchange,提问作者Paweł Selen
相关产品推荐
相关产品推荐

