如何找到系統里的重覆文件,快速釋放磁碟空間?

来源:https://www.cnblogs.com/yychuyu/archive/2020/03/10/12455007.html
-Advertisement-
Play Games

不管是 Windows 電腦還是 Linux 電腦,在使用的過程中,或多或少都會留下很多重覆的文件。這些文件不僅會占用我們的磁碟,還會拖累我們的系統,所以,很有必要幹掉這些重覆的文件。 本文將介紹 6 種方法找到系統里的重覆文件,讓你快速釋放硬碟空間! 1. 使用 diff 命令比較文件 在我們平常 ...


不管是 Windows 電腦還是 Linux 電腦,在使用的過程中,或多或少都會留下很多重覆的文件。這些文件不僅會占用我們的磁碟,還會拖累我們的系統,所以,很有必要幹掉這些重覆的文件。

本文將介紹 6 種方法找到系統里的重覆文件,讓你快速釋放硬碟空間!

1. 使用 diff 命令比較文件

在我們平常操作當中,比較兩個文件的差異最簡單的方法可能就是使用 diff 命令。diff 命令的輸出將使用 <> 符號顯示兩個文件之間的差異,利用這個特性我們可以找到相同的文件。

當兩個文件有差異時,diff 命令將輸出差異點:

$ diff index.html backup.html
2438a2439,2441
> <pre>
> That's all there is to report.
> </pre>

如果你的 diff 命令沒有輸出,則表示兩個文件相同:

$ diff home.html index.html
$

但是, diff 命令的缺點是它一次只能比較兩個文件,如果我們要比較多個文件,這樣兩個兩個比較效率肯定非常低下。

2. 使用校驗和

校驗和命令 cksum 會根據一定的演算法將文件的內容計算成一個很長的數字(如2819078353 228029)。雖然算出的結果不是絕對唯一,但是內容不相同的文件導致校驗和相同的可能性跟中國男足進世界盃差不多。

$ cksum *.html
2819078353 228029 backup.html
4073570409 227985 home.html
4073570409 227985 index.html

在我們上面的操作中,我們可以看到第二個和第三個文件校驗和是相同的,所以我們可以認為這兩個文件是一樣的。

3. 使用 find 命令

雖然 find 命令沒有查找重覆文件的選項,但是它卻可用於按名稱或類型搜索文件並運行cksum 命令。具體操作如下。

$ find . -name "*.html" -exec cksum {} \;
4073570409 227985 ./home.html
2819078353 228029 ./backup.html
4073570409 227985 ./index.html

4. 使用 fslint 命令

fslint 命令可以用來專門查找重覆文件。但是這裡有個註意事項,就是我們需要給它一個起始位置。如果我們需要運行大量文件,該命令可能需要相當長的時間才能完成查找。

$ fslint .
-----------------------------------file name lint
-------------------------------Invalid utf8 names
-----------------------------------file case lint
----------------------------------DUPlicate files   <==
home.html
index.html
-----------------------------------Dangling links
--------------------redundant characters in links
------------------------------------suspect links
--------------------------------Empty Directories
./.gnupg
----------------------------------Temporary Files
----------------------duplicate/conflicting Names
------------------------------------------Bad ids
-------------------------Non Stripped executables

Tips:我們必須在系統上安裝 fslint ,還需要將它添加到搜索路徑中:

$ export PATH=$PATH:/usr/share/fslint/fslint

5. 使用 rdfind 命令

rdfind 命令還將尋找重覆的(相同內容的)文件。被稱為“冗餘數據查找”,該命令可以根據文件日期確定哪些文件是原始文件,這對我們選擇刪除重覆項很有幫助,因為它會刪除較新的文件。

$ rdfind ~
Now scanning "/home/alvin", found 12 files.
Now have 12 files in total.
Removed 1 files due to nonunique device and inode.
Total size is 699498 bytes or 683 KiB
Removed 9 files due to unique sizes from list.2 files left.
Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.
It seems like you have 2 files that are not unique
Totally, 223 KiB can be reduced.
Now making results file results.txt

我們還可以在 dryrun 中運行。

$ rdfind -dryrun true ~
(DRYRUN MODE) Now scanning "/home/alvin", found 12 files.
(DRYRUN MODE) Now have 12 files in total.
(DRYRUN MODE) Removed 1 files due to nonunique device and inode.
(DRYRUN MODE) Total size is 699352 bytes or 683 KiB
Removed 9 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 223 KiB can be reduced.
(DRYRUN MODE) Now making results file results.txt

rdfind 命令還提供一些忽略空文件(-ignoreempty)和跟隨符號鏈接(-followsymlinks)之類的選項。下麵詳細解釋它的常用選項。

選項 意義
-ignoreempty 忽略空文件
-minsize 忽略小於特定大小的文件
-followsymlink 遵循符號鏈接
-removeidentinode 刪除引用相同inode的文件
-checksum 標識要使用的校驗和類型
-deterministic 決定如何排序文件
-makesymlinks 將重覆文件轉換為符號鏈接
-makehardlinks 用硬鏈接替換重覆文件
-makeresultsfile 在當前目錄中創建結果文件
-outputname 提供結果文件的名稱
-deleteduplicates 刪除/取消鏈接重覆文件
-sleep 設置讀取文件之間的休眠時間(毫秒)
-n,-dryrun 顯示本應執行的操作,但不要執行

這裡需要我們註意一下,rdfind命令提供了使用 -deleteduplicates true 設置刪除重覆文件的選項。顧名思義,使用這個選項它將自動刪重覆的文件。

$ rdfind -deleteduplicates true .
...
Deleted 1 files.    <==

當然,前提是我們也必須在系統上安裝 rdfind 命令。

6. 使用 fdupes 命令

fdupes 命令也可以很容易地識別重覆文件,並提供了大量有用的選項。在最簡單的操作中,它會把重覆文件放在一起,如下所示:

$ fdupes ~
/home/alvin/UPGRADE
/home/alvin/mytwin

/home/alvin/lp.txt
/home/alvin/lp.man

/home/alvin/penguin.png
/home/alvin/penguin0.png
/home/alvin/hideme.png

-r 選項代表遞歸,表示它將在各個目錄下麵使用遞歸的方式來查找重覆文件。但是,Linux 下有許多重覆文件是很重要的(比如用戶的 .bashrc 和 .profile 文件),如果被刪除將導致系統異常。

# fdupes -r /home
/home/shark/home.html
/home/shark/index.html

/home/dory/.bashrc
/home/eel/.bashrc

/home/nemo/.profile
/home/dory/.profile
/home/shark/.profile

/home/nemo/tryme
/home/shs/tryme

/home/shs/arrow.png
/home/shs/PNGs/arrow.png

/home/shs/11/files_11.zip
/home/shs/ERIC/file_11.zip

/home/shs/penguin0.jpg
/home/shs/PNGs/penguin.jpg
/home/shs/PNGs/penguin0.jpg

/home/shs/Sandra_rotated.png
/home/shs/PNGs/Sandra_rotated.png

fdupes 命令的常用選項如下表所示:

選項 意義
-r --recurse 遞歸
-R --recurse 遞歸指定的目錄
-s --symlinks-H --hardlinks 遵循符號鏈接目錄
-H --hardlinks 將硬鏈接視為重覆鏈接
-n --noempty 忽略空文件
-f --omitfirst 省略每組匹配中的第一個文件
-A --nohidden 忽略隱藏文件
-1 --sameline 相同列表匹配單行
-S --size 顯示重覆文件的大小
-m --summarize 彙總重覆文件信息
-q --quiet 進度指示器
-d --delete 提示用戶保存文件
-N --noprompt 與--delete一起使用時無效,保留集合中的第一個文件
-I --immediate 在遇到它們時刪除重覆項
-p --permissions 許可權不會將具有不同所有者/組或許可權位的SONCIDER文件作為重覆項
-o --order=WORD 根據規範的WORD訂單文件
-i --reverse 排序時反向逆序
-v --version 顯示fdupes版本
-h --help 顯示幫助

小結

Linux 系統為我們提供了很多用於定位和刪除重覆文件的工具,使用這些工具將快速找到磁碟里的重覆文件並刪除它們。希望本次分享能給大家帶來幫助~

-----------------

良許世界500強外企 Linux 開發工程師,Linux 佈道者,歡迎關註我的公眾號「良許Linux」,滿滿都是乾貨!
→「技術乾貨推送」
→「獨家資料共用」
→「高手如雲社群」
如果您對我的專題內容感興趣,也可以關註我的博客:lxlinux.net


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 從某個中斷開始 INT 0X80中斷,進入內核 ,調用函數就是system_call ,接下來就是執行system_call 2. 五段論中的中斷入口和中斷出口以及schedule 1. 首先又壓棧一些用戶態的信息, 2. 接下來就是具體去處理sys_fork,也就是中斷要產生的效果,但是在執 ...
  • 父進程創建一個子進程,並等待子進程結束;子進程調用execve啟動 使用shell的ps命令,查看系統當前的進程信息 #include <unistd.h> #include <stdio.h> #include <stdlib.h> main() { pid_t pid; char* str; c ...
  • 可以ping通,但是無法ssh連接 service iptables stop service sshd startsudo ufw statussudo ufw disablesudo ufw allow 22 ssh時permission denied, please try again 找到/ ...
  • 之前能用的虛擬機網路,在關閉後,再次使用時網路不可用了,ping www.baidu.com發現並不能通 檢查了一下虛擬機的網路配置都沒有問題,懷疑是windows的vmware相應服務沒有啟動,檢查一下 發現有一個vmware NAT的服務沒有啟動,右鍵點擊把它啟動即可 再次ping www.ba ...
  • Linux 概述 什麼是Linux?Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟體、應用程式和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是 ...
  • 1. 和用戶級相比,核心級線程有什麼不同? 在用戶級線程中,根據TCB(線程式控制制塊)切換用戶棧, 而核心級線程是,根據TCB(線程式控制制塊)切換一套棧,切換用戶棧和內核棧 2. 用戶棧和內核棧之間的關聯 進入內核棧的唯一方法是中斷 例子: 3. 開始內核中的切換 switch_to 4. 內核線程sw ...
  • 問題: 安裝了Wkhtmltopdf後,在odoo中列印出的報表顯示為已損壞。 odoo發出了一個警告提示版本不對,需要安裝qt補丁。 2020-03-10 01:53:27,152 9236 WARNING warehouse_management odoo.addons.base.models. ...
  • MRAM技術MRAM或磁性隨機存取存儲器使用1晶體管–1磁性隧道結(1T-1MTJ)架構,其中鐵磁材料的磁性“狀態”作為數據存儲元素。由於MRAM使用磁性狀態進行存儲(而不是隨時間推移而“泄漏”的電荷),因此MRAM可以提供非常長的數據保留時間(+20年)和無限的耐用性。切換磁極化(Write Cy ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...