python - 如何使用python查找具有相同内容但名称不同的重复文件?
问题描述
在进行文献研究时,我经常会遇到内容相同但名称不同的重复文件。如何使用python查找和删除重复文件?
解决方案
您可以使用fdupes工具首先在给定的一组目录中查找重复文件,然后执行删除操作。fdupes在给定路径中搜索重复文件。通过比较文件大小和 MD5 签名来识别重复文件,然后进行逐字节比较。
- 首先检查重复文件:
fdupes -rf . | grep -v '^$' > files.txt
- 然后删除:
xargs -a files.txt rm -v
如果您不想将重复列表保留在单独的文件中,而只需要删除除第一个之外的所有副本,则可以发出:
fdupes -r -f . | grep -v '^$' | xargs rm -v
如果要手动将当前目录中的重复文件一个一个删除,并且每次删除前都需要确认,请发出:
fdupes -r -d .
该fdupes
命令通常不会默认安装,但它在大多数 Linux 发行版的存储库中都可用。如果您没有安装它,只需运行:
brew install fdupes # For Mac OS X
sudo apt-get install fdupes # Debian based systems such as Ubuntu and Linux Mint
sudo yum install fdupes # On CentOS/RHEL and Fedora based systems
sudo dnf install fdupes # On Fedora 22 onwards
要fdupes
在 SLE 发行版上安装,您需要先添加存储库。
对于 SLE 11 SP4,以 root 身份运行以下命令:
zypper addrepo https://download.opensuse.org/repositories/home:paddg/SLE_11_SP4/home:paddg.repo
zypper refresh
zypper install fdupes
对于 SLE 11 SP3,以 root 身份运行以下命令:
zypper addrepo https://download.opensuse.org/repositories/home:paddg/SLE_11_SP3/home:paddg.repo
zypper refresh
zypper install fdupes
如果你想用 bash 写一些东西,你可以这样做:
#!/bin/bash
declare -A dupes
shopt -s globstar
for file in **; do
[[ -f "$file" ]] || continue
read cksm _ < <(md5sum "$file")
if ((dupes[$cksm]++)); then
echo "rm $file" # Remove echo to perform the delete
fi
done
请记住,这需要bash version 4.x
能够使用关联数组和递归搜索。但这足以处理任何文件名和递归搜索。
推荐阅读
- containers - 构建 Container-Optimized OS - Swap SSH 实现
- php - Symfony中twig模板的通用代码(四)
- c# - EPPlus DeleteRow 不会向上移动行
- php - 为新级别的数组添加额外级别的 foreach 循环
- javascript - 使用 javascript 删除广告
- ios - Gallery Swift 错误没有成员如何使用 'init(forAssetCollection:assets:)' 已替换为 'init(for:assets:)'
- python - protofile.proto:该名称的文件已经在池中
- angular - angular-i18n Angular 6 Internationalization:如何处理变量
- javascript - 在 FTP 服务器 NodeJS 上上传:错误
- arrays - 数组类型保护技巧