在Linux系统中,重复文件会占用大量磁盘空间,尤其是当同一文件被保存到不同目录或以不同名称存储时。以下是通过识别inode值(文件唯一标识)和哈希校验两种常用方法,安全删除重复文件的详细步骤:
原理:硬链接是文件的多个名称指向同一个inode(包含文件元数据的结构),删除其中一个硬链接不会影响其他链接,但删除所有硬链接后会释放空间。
步骤:
查看当前目录下文件的inode值:
使用ls -i命令列出文件及其inode号,相同inode号的文件即为硬链接。例如:
ls -i myfile mycopy mytwins
输出结果中,若myfile、mycopy、mytwins的inode号相同(如788000),则它们是硬链接。
批量找出所有重复的inode:
将ls -i的结果排序并提取重复的inode号,便于后续处理:
ls -i | sort -n > /tmp/inode_list.txt
使用awk或uniq命令找出重复的inode(需手动检查/tmp/inode_list.txt):
awk '{print $1}' /tmp/inode_list.txt | sort | uniq -d
删除重复的硬链接(保留一个):
编写脚本遍历重复的inode,使用find命令删除除第一个文件外的所有硬链接。例如:
#!/bin/bash
prev="" # 记录上一个inode号
while read line; do
inode=$(echo $line | awk '{print $1}')
file=$(echo $line | awk '{print $2}')
if [ "$inode" == "$prev" ]; then
echo "Deleting duplicate hard link: $file"
rm "$file" # 删除重复文件(保留$prev对应的文件)
else
prev=$inode
fi
done < /tmp/inode_list.txt
运行脚本前,建议先预览/tmp/inode_list.txt确认重复文件,避免误删。
原理:即使文件名不同、路径不同,只要文件内容完全一致,其哈希值(如MD5、SHA256)也会相同。这种方法适用于识别“内容重复”的文件(而非硬链接)。
步骤:
安装必要工具:
大多数Linux发行版自带md5sum(计算MD5哈希)、sha256sum(计算SHA256哈希)工具,无需额外安装。
计算目录下所有文件的哈希值:
使用find命令遍历目录,计算每个文件的哈希值并保存到临时文件:
find /path/to/search -type f -exec md5sum {} + > /tmp/file_hashes.txt
示例中/path/to/search替换为需要搜索的目录(如~表示家目录),+表示批量处理以提高效率。
找出重复的哈希值:
使用sort和uniq命令筛选出重复的哈希值(-D选项显示所有重复行):
sort /tmp/file_hashes.txt | uniq -D -w 32
-w 32表示只比较每行前32个字符(MD5哈希的长度),避免因文件名不同导致的误判。
删除重复文件(保留一个):
提取重复哈希值对应的文件列表,保留第一个文件,删除其余文件。例如:
#!/bin/bash
awk '{
hash = $1;
file = substr($0, index($0,$2)); # 提取文件名($2及之后的部分)
if (hash in seen) {
print "Deleting duplicate: " file;
rm -f "$file"; # 强制删除(可根据需要改为-i交互确认)
} else {
seen[hash] = file;
}
}' /tmp/file_hashes.txt
运行脚本前,建议先预览输出的重复文件列表,确认无误后再执行删除操作。
cp -r复制目录到外部存储),避免误删导致数据丢失。ls -l查看文件类型(l开头为符号链接)。rm命令改为echo(如echo "Would delete: $file"),预览将要删除的文件,确认无误后再恢复rm命令。通过以上方法,可高效识别并删除Linux系统中的重复文件,释放宝贵的磁盘空间。根据实际需求选择合适的方法(硬链接适合识别“同一文件的不同名称”,哈希校验适合识别“内容相同的文件”),确保操作安全。