【问题标题】:How to find duplicate files with same content, but with different names using python? [closed]如何使用python查找具有相同内容但名称不同的重复文件? [关闭]
【发布时间】:2021-01-28 11:53:32
【问题描述】:

在进行文献研究时,我经常会遇到内容相同但名称不同的重复文件。如何使用python查找和删除重复文件?

【问题讨论】:

  • 给每个文件写一个md5sum脚本,找到md5sum相同的文件并删除。

标签: python file duplicates


【解决方案1】:

您可以使用fdupes 工具先在给定的一组目录中查找重复文件,然后执行删除操作。 fdupes 在给定路径中搜索重复文件。通过比较文件大小和 MD5 签名来识别重复文件,然后进行逐字节比较。

  1. 首先检查重复文件:
fdupes -rf . | grep -v '^$' > files.txt
  1. 然后删除:
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 才能使用关联数组和递归搜索。但这足以处理任何文件名和递归搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 2018-06-07
    • 2022-10-17
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多