【发布时间】:2021-01-28 11:53:32
【问题描述】:
在进行文献研究时,我经常会遇到内容相同但名称不同的重复文件。如何使用python查找和删除重复文件?
【问题讨论】:
-
给每个文件写一个md5sum脚本,找到md5sum相同的文件并删除。
标签: python file duplicates
在进行文献研究时,我经常会遇到内容相同但名称不同的重复文件。如何使用python查找和删除重复文件?
【问题讨论】:
标签: python file duplicates
您可以使用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
要在 SLE 发行版上安装 fdupes,您需要先添加存储库。
对于 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 才能使用关联数组和递归搜索。但这足以处理任何文件名和递归搜索。
【讨论】: