在Linux中查找和删除重复文件的4种方法

大神教你在Linux中查找和删除重复文件的4种方法

在本教程中,您将学习如何使用rdfind和fdupes命令行工具以及称为DupeGuru和FSlint的GUI工具在Linux中查找和删除重复文件。

如果您习惯于从网络下载各种内容,则整理您的主目录甚至系统可能会特别困难。

您可能会发现自己下载了相同的mp3,pdf,zip(以及所有其他类型的文件扩展名)并将其复制到其他目录。这可能会导致目录中充斥着各种无用的重复内容。

在本教程中,您将学习如何使用rdfind和fdupes命令行工具以及称为DupeGuru和FSlint的GUI工具在Linux中查找和删除重复文件。

需要注意的是 – 永远要小心你在系统上删除的内容,因为这可能会导致不必要的数据丢失。如果您正在使用一个新工具,首先在一个测试目录中尝试它,在那里删除文件不会出现问题。

1. Rdfind –在Linux中查找重复文件

Rdfind 意即 redundant data find(冗余数据查找),是一个通过访问目录和子目录来找出重复文件的自由开源的工具。它是基于文件内容而不是文件名来比较。Rdfind 使用排序算法来区分原始文件和重复文件。如果你有两个或者更多的相同文件,Rdfind 会很智能的找到原始文件并认定剩下的文件为重复文件。一旦找到副本文件,它会向你报告。你可以决定是删除还是使用硬链接或者符号(软)链接代替它们。

要在Linux中安装rdfind,请根据您的Linux发行版使用以下命令。

  1. $ sudo apt-get install rdfind [在 Debian/Ubuntu 上] 
  2. $ sudo yum install epel-release && $ sudo yum install rdfind [在 CentOS/RHEL 上] 
  3. $ sudo dnf install rdfind [在 Fedora 22+ 上] 
  4. $ sudo pacman -S rdfind [在 Arch Linux 上] 

要在目录上运行rdfind,只需键入rdfind和目标目录。下面来看一个例子:

  1. linuxmi@linuxmi:~$ rdfind /home/user 

正如你所看到rdfind将结果保存在一个文件名为RESULTS.TXT位于从那里你运行该程序的目录中。该文件包含rdfind找到的所有重复文件。您可以查看文件,并根据需要手动删除重复的文件。

您可以做的另一件事是使用-dryruna选项,该选项将提供重复项列表,而无需执行任何操作:

  1. rdfind -dryrun true /home/user 

找到重复项后,您可以选择将其替换为硬链接。

  1. rdfind -makehardlinks true /home/user 

如果您希望删除重复项,则可以运行。

  1. rdfind -deleteduplicates true /home/user 

要查看rdfind的其他有用选项,可以使用rdfind手册。

  1. man rdfind 

2. Fdupes –在Linux中扫描重复文件

Fdupes是另一个程序,它使您可以识别系统上的重复文件。它是免费的并且是开源的,并且使用C语言编写。它使用以下方法来确定重复的文件:

  • 比较部分md5sum签名
  • 比较完整的md5sum签名
  • 逐字节比较验证

就像rdfind一样,它具有类似的选项:

  • 递归搜索
  • 排除空文件
  • 显示重复文件的大小
  • 立即删除重复项
  • 排除其他所有者的文件

要在Linux中安装fdupes,请根据Linux发行版使用以下命令。

  1. $ sudo apt-get install fdupes [在Debian / Ubuntu上] 
  2. $ sudo yum install epel-release && $ sudo yum install fdupes [在CentOS / RHEL上] 
  3. $ sudo dnf install fdupes [在Fedora 22+上] 
  4. $ sudo pacman -S fdupes [在Arch Linux上] 

Fdupes语法类似于rdfind。只需键入命令,然后键入您要扫描的目录即可。

  1. $ fdupes <dir
  2.  
  3. linuxmi@linuxmi:~$ fdupes /home/linuxmi/www.linuxmi.com 
  4. /home/linuxmi/www.linuxmi.com/linuxmi.txt 
  5. /home/linuxmi/www.linuxmi.com/linuxmi(复件).txt 

要递归地搜索文件,必须像这样指定-r选项。

  1. $ fdupes -r <dir
  2.  
  3. linuxmi@linuxmi:~$ fdupes -r /home/linuxmi/www.linuxmi.com 
  4. /home/linuxmi/www.linuxmi.com/linuxmi.txt 
  5. /home/linuxmi/www.linuxmi.com/linuxmi(复件).txt 
  6.  
  7. /home/linuxmi/www.linuxmi.com/color-schemes/.git/logs/refs/remotes/origin/HEAD 
  8. /home/linuxmi/www.linuxmi.com/color-schemes/.git/logs/refs/heads/master 
  9. /home/linuxmi/www.linuxmi.com/color-schemes/.git/logs/HEAD 
  10. /home/linuxmi/www.linuxmi.com/color-schemes/script/test 
  11. /home/linuxmi/www.linuxmi.com/test 

还可以指定多个目录,并指定递归搜索的目录。

  1. fdupes <dir1> -r <dir2

要使fdupes计算重复文件的大小,请使用该-S选项。

  1. fdupes -S <dir

要收集有关找到的文件的摘要信息,请使用-m选项。

  1. fdupes -m <dir
  2.  
  3. fdupes -m /home/linuxmi/www.linuxmi.com/ 

最后,如果要删除所有重复项,请使用如下所示-d的选项。

  1. fdupes -d <dir

Fdupes将询问要删除哪些找到的文件。您将需要输入文件号:

  1. fdupes -d /home/linuxmi/www.linuxmi.com/ 

绝对不建议使用的解决方案是使用该-N选项,该选项将导致仅保留第一个文件。

  1. fdupes -dN <dir

要获取与fdupes一起使用的可用选项的列表,请通过运行查看帮助页面。

  1. fdupes -help 

3. dupeGuru –在Linux中查找重复文件

dupeGuru是一个开放源代码和跨平台的工具,可用于在Linux系统中查找重复文件。该工具可以扫描文件名或一个或多个文件夹中的内容。它还允许您找到与要搜索的文件相似的文件名。

dupeGuru有适用于Windows,Mac和Linux平台的不同版本。它的快速模糊匹配算法功能可帮助您在短时间内找到重复的文件。它是可自定义的,您可以提取所需的确切重复文件,并从系统中清除不需要的文件。

要在Linux中安装dupeGuru,请根据您的Linux发行版使用以下命令。

  1. ————— 在 Debian/Ubuntu/Mint 上————— 
  2. $ sudo add-apt-repository ppa:dupeguru/ppa 
  3. $ sudo apt-get update 
  4. $ sudo apt-get install dupeguru 
  5.  
  6. ————— 在 Arch Linux 上————— 
  7. $ sudo pacman -S dupeguru 

Ubuntu 20.04 安装 dupeGuru 见 http://www.linuxidc.net/thread-9837-1-1.html

4. FSlint – Linux的重复文件查找器

FSlint是一个免费实用程序,用于查找和清除文件系统上各种形式的皮棉。它还报告重复文件,空目录,临时文件,重复/冲突(二进制)名称,错误的符号链接等。它同时具有命令行和GUI模式。

要在Linux中安装FSlint,请根据Linux发行版使用以下命令。

  1. $ sudo apt-get install fslint [在 Debian/Ubuntu 上] 
  2. $ sudo yum install epel-release && $ sudo yum install fslint [在 CentOS/RHEL 上] 
  3. $ sudo dnf install fslint [在 Fedora 22+ 上] 
  4. $ sudo pacman -S fslint [在 Arch Linux 上] 

Ubuntu 20.04 安装 FSlint 的方法见 http://www.linuxidc.net/thread-9836-1-1.html

结论

这些是在Linux系统上查找重复文件的非常有用的工具,但是删除此类文件时应格外小心。

如果不确定是否需要文件,最好创建该文件的备份,并在删除文件之前记住其目录。如果您有任何问题或意见,请在下面的评论部分中提交。

鸿蒙官方战略合作共建——HarmonyOS技术社区

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果您想要在 Linux 将数据写入文件,并确保不重复,可以使用以下方法之一: 1. 使用重定向符号 ">": ``` echo "your data" >> yourfile.txt ``` 这将把 "your data" 写入文件 "yourfile.txt" 的末尾。如果 "yourfile.txt" 不存在,则会创建该文件。如果您不希望重复添加相同的数据,可以使用以下命令: ``` grep -qxF "your data" yourfile.txt || echo "your data" >> yourfile.txt ``` 该命令首先使用 grep 命令在文件查找 "your data",如果找不到,则将 "your data" 写入文件。 2. 使用 tee 命令: ``` echo "your data" | tee -a yourfile.txt ``` 这将把 "your data" 同时写入标准输出和文件 "yourfile.txt" 的末尾。如果您不希望重复添加相同的数据,可以使用以下命令: ``` echo "your data" | tee -a yourfile.txt | awk '!x[$0]++' ``` 该命令使用 awk 命令删除重复行,只将不重复的行写入文件。 ### 回答2: 在Linux操作系统,要在文件写入数据,并且确保文件之间的内容不重复,可以通过以下步骤实现: 1. 打开要写入数据的文件:使用操作系统提供的函数或命令,如open()函数来打开目标文件。可以指定文件的读写模式为写入模式,以确保只能向文件写入数据。 2. 检查文件内容:在写入数据之前,可以先读取文件的内容进行检查。可以使用操作系统提供的函数或命令,如read()函数来读取文件内容,然后与要写入的数据进行比较,确保文件不存在重复的数据。 3. 写入数据:根据需要将数据写入文件。可以使用操作系统提供的函数或命令,如write()函数来将数据写入文件。在执行写入操作之前,可以先将文件指针移到文件的末尾,以确保新写入的数据附加在原有内容的后面。 4. 关闭文件:在数据写入完成后,应该关闭文件,释放相关资源。可以使用操作系统提供的函数或命令,如close()函数来关闭文件。关闭文件可以确保数据已经完全写入,并且释放相应的文件句柄。 通过以上步骤,就可以在Linux文件写入数据,并且确保文件之间的内容不重复。在每次写入数据前,可以进行检查,避免重复写入相同的数据。当然,在写入数据时,也可以使用其他方式进行数据处理和去重,以确保文件不会有重复的内容。 ### 回答3: 在Linux,可以使用多方法文件写入数据,并且确保文件之间不重复。以下是一可能的实现方式: 1. 首先,我们需要一个记录文件已写入数据的索引文件。这可以是一个单独的文件,其每一行包含已写入数据的文件名、起始偏移量和数据长度。例如,我们可以创建一个名为"index.txt"的文本文件。 2. 针对每个文件,我们首先检查索引文件,以确保要写入的数据不会与已存在的文件重叠。我们可以遍历索引文件的每一行,检查文件名和偏移量。如果存在重叠,则需要更新文件名并重新计算偏移量。 3. 在确定了可用的文件名和偏移量后,我们可以打开目标文件进行写入操作。可以使用标准的文件操作函数,如fopen、fwrite等来写入数据。 4. 写入完成后,我们需要更新索引文件。将新的文件名、起始偏移量和数据长度添加到索引文件的末尾,并保存。 这样,我们就可以确保在多个文件写入数据时,文件之间不会发生重叠。每次写入数据之前,都会对现有文件进行检查,并在写入完成后更新索引文件。这方法可以有效地管理文件的数据写入,避免数据重复的问题。 注意:上述方法仅为一参考实现,具体的实现方式可能因应用场景的不同而有所差异。正式的实现需要考虑错误处理、并发访问、性能等方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值