如何在 Linux 中找到並刪除重複檔案
在編輯或修改配置檔案或舊檔案前,我經常會把它們備份到硬碟的某個地方,因此我如果意外地改錯了這些檔案,我可以從備份中恢復它們。但問題是如果我忘記清理備份檔案,一段時間之後,我的磁碟會被這些大量重複檔案填滿 —— 我覺得要麼是懶得清理這些舊檔案,要麼是擔心可能會刪掉重要檔案。如果你們像我一樣,在類 Unix 作業系統中,大量多版本的相同檔案放在不同的備份目錄,你可以使用下面的工具找到並刪除重複檔案。
提醒一句:
在刪除重複檔案的時請儘量小心。如果你不小心,也許會導致意外丟失資料。我建議你在使用這些工具的時候要特別注意。
在 Linux 中找到並刪除重複檔案
出於本指南的目的,我將討論下面的三個工具:
- Rdfind
- Fdupes
- FSlint
這三個工具是自由開源的,且執行在大多數類 Unix 系統中。
1. Rdfind
Rdfind 意即 redundant data find(冗餘資料查詢),是一個通過訪問目錄和子目錄來找出重複檔案的自由開源的工具。它是基於檔案內容而不是檔名來比較。Rdfind 使用排序演算法來區分原始檔案和重複檔案。如果你有兩個或者更多的相同檔案,Rdfind 會很智慧的找到原始檔案並認定剩下的檔案為重複檔案。一旦找到副本檔案,它會向你報告。你可以決定是刪除還是使用硬連結或者符號(軟)連結代替它們。
安裝 Rdfind
Rdfind 存在於 AUR 中。因此,在基於 Arch 的系統中,你可以像下面一樣使用任一如
1 | $yay-Srdfind |
在 Debian、Ubuntu、Linux Mint 上:
1 | $sudo apt-get install rdfind |
在 Fedora 上:
1 | $sudo dnf install rdfind |
在 RHEL、CentOS 上:
12 | $sudo yum install epel-release$sudo yum install rdfind |
用法
一旦安裝完成,僅帶上目錄路徑執行 Rdfind 命令就可以掃描重複檔案。
1 | $rdfind~/Downloads |
正如你看到上面的截圖,Rdfind 命令將掃描 ~/Downloads
目錄,並將結果儲存到當前工作目錄下一個名為 results.txt
的檔案中。你可以在 results.txt
檔案中看到可能是重複檔案的名字。
12345678910 | $cat results.txt# Automatically generated# duptype id depth size device inode priority nameDUPTYPE_FIRST_OCCURRENCE1469892050158648841/home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test5.regexDUPTYPE_WITHIN_SAME_TREE-1469892050158648861/home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test6.regex[...]DUPTYPE_FIRST_OCCURRENCE1304036352050157402571/home/sk/Downloads/Hyperledger(1).pdfDUPTYPE_WITHIN_SAME_TREE-1304036352050157410711/home/sk/Downloads/Hyperledger.pdf# end of file |
通過檢查 results.txt
檔案,你可以很容易的找到那些重複檔案。如果願意你可以手動的刪除它們。
此外,你可在不修改其他事情情況下使用 -dryrun
選項找出所有重複檔案,並在終端上輸出彙總資訊。
1 | $rdfind-dryrun true~/Downloads |
一旦找到重複檔案,你可以使用硬連結或符號連結代替他們。
使用硬連結代替所有重複檔案,執行:
1 | $rdfind-makehardlinks true~/Downloads |
使用符號連結/軟連結代替所有重複檔案,執行:
1 | $rdfind-makesymlinks true~/Downloads |
目錄中有一些空檔案,也許你想忽略他們,你可以像下面一樣使用 -ignoreempty
選項:
1 | $rdfind-ignoreempty true~/Downloads |
如果你不再想要這些舊檔案,刪除重複檔案,而不是使用硬連結或軟連結代替它們。
刪除重複檔案,就執行:
1 | $rdfind-deleteduplicates true~/Downloads |
如果你不想忽略空檔案,並且和所喲重複檔案一起刪除。執行:
1 | $rdfind-deleteduplicates true-ignoreempty false~/Downloads |
更多細節,參照幫助部分:
1 | $rdfind--help |
手冊頁:
1 | $man rdfind |
2. Fdupes
Fdupes 是另一個在指定目錄以及子目錄中識別和移除重複檔案的命令列工具。這是一個使用 C 語言編寫的自由開源工具。Fdupes 通過對比檔案大小、部分 MD5 簽名、全部 MD5 簽名,最後執行逐個位元組對比校驗來識別重複檔案。
與 Rdfind 工具類似,Fdupes 附帶非常少的選項來執行操作,如:
- 在目錄和子目錄中遞迴的搜尋重複檔案
- 從計算中排除空檔案和隱藏檔案
- 顯示重複檔案大小
- 出現重複檔案時立即刪除
- 使用不同的擁有者/組或許可權位來排除重複檔案
- 更多
安裝 Fdupes
Fdupes 存在於大多數 Linux 發行版的預設倉庫中。
在 Arch Linux 和它的變種如 Antergos、Manjaro Linux 上,如下使用 Pacman 安裝它。
1 | $sudo pacman-Sfdupes |
在 Debian、Ubuntu、Linux Mint 上:
1 | $sudo apt-get install fdupes |
在 Fedora 上:
1 | $sudo dnf install fdupes |
在 RHEL、CentOS 上:
12 | $sudo yum install epel-release$sudo yum install fdupes |
用法
Fdupes 用法非常簡單。僅執行下面的命令就可以在目錄中找到重複檔案,如:~/Downloads
。
1 | $fdupes~/Downloads |
我係統中的樣例輸出:
12 | /home/sk/Downloads/Hyperledger.pdf/home/sk/Downloads/Hyperledger(1).pdf |
你可以看到,在 /home/sk/Downloads/
目錄下有一個重複檔案。它僅顯示了父級目錄中的重複檔案。如何顯示子目錄中的重複檔案?像下面一樣,使用 -r
選項。
1 | $fdupes-r~/Downloads |
現在你將看到 /home/sk/Downloads/
目錄以及子目錄中的重複檔案。
Fdupes 也可用來從多個目錄中迅速查詢重複檔案。
1 | $fdupes~/Downloads~/Documents/ostechnix |
你甚至可以搜尋多個目錄,遞迴搜尋其中一個目錄,如下:
1 | $fdupes~/Downloads-r~/Documents/ostechnix |
上面的命令將搜尋 ~/Downloads
目錄,~/Documents/ostechnix
目錄和它的子目錄中的重複檔案。
有時,你可能想要知道一個目錄中重複檔案的大小。你可以使用 -S
選項,如下:
1234 | $fdupes-S~/Downloads403635bytes each:/home/sk/Downloads/Hyperledger.pdf/home/sk/Downloads/Hyperledger(1).pdf |
類似的,為了顯示父目錄和子目錄中重複檔案的大小,使用 -Sr
選項。
我們可以在計算時分別使用 -n
和 -A
選項排除空白檔案以及排除隱藏檔案。
12 | $fdupes-n~/Downloads$fdupes-A~/Downloads |
在搜尋指定目錄的重複檔案時,第一個命令將排除零長度檔案,後面的命令將排除隱藏檔案。
彙總重複檔案資訊,使用 -m
選項。
12 | $fdupes-m~/Downloads1duplicate files(in1sets),occupying403.6kilobytes |
刪除所有重複檔案,使用 -d
選項。
1 | $fdupes-d~/Downloads |
樣例輸出:
1234 | [1]/home/sk/Downloads/Hyperledger Fabric Installation.pdf[2]/home/sk/Downloads/Hyperledger Fabric Installation(1).pdfSet1of1,preserve files[1-2,all]: |
這個命令將提示你保留還是刪除所有其他重複檔案。輸入任一號碼保留相應的檔案,並刪除剩下的檔案。當使用這個選項的時候需要更加註意。如果不小心,你可能會刪除原檔案。
如果你想要每次保留每個重複檔案集合的第一個檔案,且無提示的刪除其他檔案,使用 -dN
選項(不推薦)。
1 | $fdupes-dN~/Downloads |
當遇到重複檔案時刪除它們,使用 -I
標誌。
1 | $fdupes-I~/Downloads |
關於 Fdupes 的更多細節,檢視幫助部分和 man 頁面。
相關推薦如何在 Linux 中找到並刪除重複檔案在編輯或修改配置檔案或舊檔案前,我經常會把它們備份到硬碟的某個地方,因此我如果意外地改錯了這些檔案,我可以從備份中恢復它們。但問題是如果我忘記清理備份檔案,一段時間之後,我的磁碟會被這些大量重複檔案填滿 —— 我覺得要麼是懶得清理這些舊檔案,要麼是擔心可能會刪掉重 大神教你在Linux中查詢和刪除重複檔案導讀 在Linux系作業系統中查詢並刪除重複檔案的方法的確有很多,不過這裡介紹的是一款非常簡單實用的軟體FSlint。FSlint是一個重複檔案查詢工具,可以使用它來清除不必要的重複檔案,筆者經常使用它來釋放Linux系統中的磁碟空間。 FSlint同時具有GUI和 Linux系統中查詢、刪除重複檔案,釋放磁碟空間。在Linux系作業系統中查詢並刪除重複檔案的方法的確有很多,不過這裡介紹的是一款非常簡單實用的軟體FSlint。FSlint是一個重複檔案查詢工具,可以使用它來清除不必要的重複檔案,筆者經常使用它來釋放Linux系統中的磁碟空間。 FSlint同時具有GUI和CLI模式。因 Linux中find批量刪除空檔案及空資料夾指令碼linux下批量刪除空檔案(大小等於0的檔案)的方法 程式碼如下 複製程式碼 find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用這個還可以刪除指定大小的檔案,只要修改對應的 -size 引數就行 查詢資料庫中某一列值重複的資料,查詢並刪除重複的資料查詢LSCJMB表中F_CJZY對應列值重複的資料: SELECT F_CJZY,COUNT(F_CJZY) FROM LSCJMB GROUP BY F_CJZY HAVING COUNT( F_CJZY )>1 查出了重複的列及重複行數: 刪除全部涉及重複的資料: del linux下將一個目錄下的所有檔案拷貝到另一個大檔案中,並把大檔案拆分成原來的小檔案,大小,內容,名字不變經過四五天的編寫與除錯,初步完成了檔案操作工具的內容,以下是程式碼說明: 首先,我測試用的檔案在/home/xudong/mywork下,我的最終生成檔案是在這個路徑下,/home/xudong/work/resultfile.txt,分開後生成的小檔案在/home/xud Linux中如何新增/刪除FTP使用者並設定許可權在linux中新增ftp使用者,並設定相應的許可權,操作步驟如下: 1.環境:ftp為vsftp。被設定使用者名稱為test。被限制路徑為/home/test 2.建立建使用者:在root使用者下: useradd -d /home/test -m test #增加使用者t linux實戰(五)----壓縮備份檔案並刪除原檔案----例項解析我們在日常的監控中要考慮到磁碟空間的問題,經常會把日誌檔案壓縮備份並刪除原檔案。 我們在基礎(八)中已經學習了壓縮檔案的命令,我們需要做的是把壓縮命令與指令碼結合起來。 這裡以實戰(四)中寫 在Linux系統中如何快速刪除jdk檔案建立一個jdk.sh的指令碼 touch jdk.sh 找到jdk的位置重定向到jdk.sh腳本里面 rpm –qa|grepjava >> jdk.sh 在jdk.sh腳本里面編寫刪除命令 用vi 開啟jdk.sh 在前面加上rpm –e –nodeps java中對比陣列元素並刪除重複元素package com.kyee.hrp_local.cost.dept_cost_reckon.base_config.human_manage.huaman_report.dao.impl; import java.util.ArrayList; import java linux查找並替換命令file ccache -name depth -i cache name max ++ find ./ -maxdepth 3 -type f -name "*Makefile" |xargs sed -i "s/CXX = g++/CXX = ccache g++/ Linux中新增和刪除使用者命 令: userdel 功能說明:刪除使用者帳號。 語 法:userdel [-r][使用者帳號] 補充說明:userdel可刪除使用者帳號與相關的檔案。若不加引數,則僅刪除使用者帳號,而不刪除相關檔案。 參 數: -f 刪除使用者登入目錄以及目錄中所有檔案。 -r 遞迴(一個一個的)刪除 警告: 請 刪除重複檔案的指令碼程式碼測試環境 :centos7 ⚠️注意:該程式碼在Mac os系統下會因為引數問題報錯 無引數“ls --time-style” "uniq -w" "md5sum" mac 安裝md5命令 brew install md5sha1sum #!/bin/bash #查詢並刪除重複檔案 每 Java中使用deleteOnExit()刪除臨時檔案出現的問題這幾天在做一個讀取外部系統檔案資料的任務,需要把外部檔案資料,讀到本地進行處理。 剛好,Java中可以建立臨時檔案,並且任務中要求需要刪除臨時檔案,通過查詢API,Java的File類 CTF-web Linux中幾個關鍵的檔案有些時候,我們遇到可以檔案包含讀取linux檔案的題目,在flag不在根目錄,不在標準目錄,需要我們去找的時候,有些檔案就顯得比較有意義。通過讀取系統的這些關鍵檔案,我們可以找到蛛絲馬跡,從而找到flag的藏身之地,當然,最關鍵的是,我們需要知道linux中有哪些比較關鍵的,有用的檔案。 下圖是 linux中的頁快取和檔案IO一篇比較好的關於頁快取的描述文章一篇比較好的關於頁快取的描述文章 雖然仔細看過《linux核心設計與實現》,也參考了很多的部落格,並且做了linux程序空間、address_space和檔案的關係圖(設為圖1,參考部落格),但是對於頁快取和檔案IO之間關係的細節一直不是特別明朗。趁著元旦假期看的 Linux中 /proc/[pid] 目錄各檔案簡析Linux 核心提供了一種通過 proc 檔案系統,在執行時訪問核心內部資料結構、改變核心設定的機制。proc 檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。 使用者和應用程式可以通過 proc 得到系統 Linux中的原始檔、目標檔案、庫檔案在說明Linux的.a、.so和.o檔案關係之前,先來看看windows下obj,lib,dll,exe的關係 windows下obj,lib,dll,exe的關係 lib是和dll對應的。lib是靜態連結庫的庫檔案,dll是動 linux中C語言標頭檔案詳解linux中C程式標頭檔案的種類 一類:#include<stdio.h> stdio.h檔案就在/usr/include目錄下 二類:#include<arpa/inet.h> arpa/是/usr/include目錄下的子目錄,inet.h其實是/usr/include Linux中使用者的登陸審計,檔案的同步,檔案歸檔,壓縮############# 使用者的登陸審計 ##################### ###首先在真機中連線入虛擬機器(便於操作) 在真機中開啟shell 中的虛擬機器desktop 和 server 容易分不清: 如下: 如上圖分不清 哪個是虛擬機器desk |