自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利用 Linux 查找重復(fù)文件

系統(tǒng) Linux
本部分算是對find強(qiáng)大功能的擴(kuò)展使用方法說明。在find的基礎(chǔ)上,我們可與(如xargs命令)等其它基本Linux命令相結(jié)合,即能創(chuàng)造出無限的命令行功能。

[[423532]]

 方法一:使用Find命令

本部分算是對find強(qiáng)大功能的擴(kuò)展使用方法說明。在find的基礎(chǔ)上,我們可與(如xargs命令)等其它基本Linux命令相結(jié)合,即能創(chuàng)造出無限的命令行功能,比如:可以快速查找出Linux某個(gè)文件夾及其子文件夾中的重復(fù)文件列表。要實(shí)現(xiàn)這個(gè)功能在流程上是比較簡單的,只要查找遍歷出所有文件,再通過命令去比較每個(gè)文件的MD5就OK啦。

聽起來好像比較抽象,其實(shí)命令就一條: 

  1. find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate 
  •  find -not -empty -type f -printf “%sn” 表示使用find命令搜索出所有非空文件,再打印出他們的大小
  •  sort -rn 命令不用多說了把,這條命令就是按文件大小進(jìn)行反向排序
  • uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 表示只打印了重復(fù)的行,這里使用代表打印出文件名相同的文件
  •  uniq -w32 –all-repeated=separate 最后這里表示對MD5的前32個(gè)字節(jié)進(jìn)行對比,以篩選出重復(fù)文件 使用命令行的整個(gè)過程就是這么簡單和容易。

方法二:使用dupeGuru工具

DupeGuru是一個(gè)跨平臺應(yīng)用,有Linux、Windows和Mac OS X版本,它可以通過文件大小、MD5和文件名等多種標(biāo)準(zhǔn)來幫助用戶找出Linux中的重復(fù)文件。Ubuntu用戶可以直接通過添加如下PPA源來方式來進(jìn)行安裝: 

  1. sudo add-apt-repository ppa:hsoft/ppa  
  2. sudo apt-get update  
  3. sudo apt-get install dupeguru* 

方法三:使用Find命令解析

在工作生活當(dāng)中,我們很可能會遇到查找重復(fù)文件的問題。比如從某游戲提取的游戲文本有重復(fù)的,我們希望找出所有重復(fù)的文本,讓翻譯只翻譯其中一份,而其他的直接替換。那么這個(gè)問題該怎么做呢?當(dāng)然方法多種多樣,而且無論那種方法應(yīng)該都不會太難,但筆者第一次遇到這個(gè)問題的時(shí)候第一反應(yīng)是是用Linux的Shell腳本,所以文本介紹這種方式。

先上代碼: 

  1. find -not -empty -type f -printf "%sn" | sort -rn |uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate | cut -b 36- 

大家先cd到自己想要查找重復(fù)文件的文件夾,然后copy上面代碼就可以了,系統(tǒng)會對當(dāng)前文件夾及子文件夾內(nèi)的所有文件進(jìn)行查重。

下面分析一下上面的命令。

首先看第一句: 

  1. find -not -empty -type f -printf "%sn" 

find是查找命令;-not -empty是要尋找非空文件;-type f是指尋找常規(guī)文件;-printf “%sn”比較具有迷惑性,這里的%s并非C語言中的輸出字符串,它實(shí)際表示的是文件的大小,單位為bytes(不懂就man,man一下find,就可以看到了),n是換行符。所以這句話的意思是輸出所有非空文件的大小。

通過管道,上面的結(jié)果被傳到第二句:

  1. sort -rn 

sort是排序,-n是指按大小排序,-r是指從大到小排序(逆序reverse)。

第三句: 

  1. uniq -d 

uniq是把重復(fù)的只輸出一次,而-d指只輸出重復(fù)的部分(如9出現(xiàn)了5次,那么就輸出1個(gè)9,而2只出現(xiàn)了1次,并非重復(fù)出現(xiàn)的數(shù)字,故不輸出)。

第四句: 

  1. xargs -I{} -n1 find -type f -size {}c -print0 

這一部分分兩部分看,第一部分是xargs -I{} -n1,xargs命令將之前的結(jié)果轉(zhuǎn)化為參數(shù),供后面的find調(diào)用,其中-I{}是指把參數(shù)寫成{},而-n1是指將之前的結(jié)果一個(gè)一個(gè)輸入給下一個(gè)命令(-n8就是8個(gè)8個(gè)輸入給下一句,不寫-n就是把之前的結(jié)果一股腦的給下一句)。后半部分是find -type f -size {}c -print0,find指令我們前面見過,-size{}是指找出大小為{}bytes的文件,而-print0則是為了防止文件名里帶空格而寫的參數(shù)。

第五句: 

  1. xargs -0 md5sum 

xargs我們之前說過,是將前面的結(jié)果轉(zhuǎn)化為輸入,那么這個(gè)-0又是什么意思?man一下xargs,我們看到-0表示讀取參數(shù)的時(shí)候以null為分隔符讀取,這也不難理解,畢竟null的二進(jìn)制表示就是00。后面的md5sum是指計(jì)算輸入的md5值。

第六句:sort是排序,這個(gè)我們前面也見過。

第七句: 

  1. uniq -w32 --all-repeated=separate 

uniq -w32是指尋找前32個(gè)字符相同的行,原因在于md5值一定是32位的,而后面的--all-repeated=separate是指將重復(fù)的部分放在一類,分類輸出。

第八句: 

  1. cut -b 36- 

由于我們的結(jié)果帶著md5值,不是很好看,所以我們截取md5值后面的部分,cut是文本處理函數(shù),這里-b 36-是指只要每行36個(gè)字符之后的部分。

我們將上述每個(gè)命令用管道鏈接起來,存入result.txt: 

  1. find -not -empty -type f -printf "%sn" | sort -rn |uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate | cut -b 36- >result.txt 

雖然結(jié)果很好看,但是有一個(gè)問題,這是在Linux下很好看,實(shí)際上如果有朋友把輸出文件放到Windows上,就會發(fā)現(xiàn)換行全沒了,這是由于Linux下的換行是n,而windows要求nr,為了解決這個(gè)問題,我們最后執(zhí)行一條指令,將n轉(zhuǎn)換為nr: 

  1. cat result.txt | cut -c 36- | tr -s 'n'  

 

責(zé)任編輯:龐桂玉 來源: 良許Linux
相關(guān)推薦

2010-03-03 13:45:08

Python查找重復(fù)文

2015-09-02 15:47:05

命令行fdupesLinux

2017-12-26 11:13:41

Linuxfind文件查找

2022-04-11 06:03:24

FdupesLinux命令行工具

2021-08-09 11:31:54

Linux重復(fù)相片刪除

2020-11-13 09:14:23

Linux重復(fù)文件命令行

2017-10-11 16:23:59

Linuxinode刪除文件

2019-07-03 11:16:51

Linux數(shù)據(jù)庫Line

2015-08-13 09:09:10

LinuxdupeGuru

2017-01-12 19:22:19

Linuxlsof命令恢復(fù)刪除的文件

2009-05-26 12:23:56

Linux變量文件命名

2016-12-07 17:45:44

Linux文件

2018-10-17 09:20:31

Linux命令重復(fù)文件

2018-03-30 17:51:17

Linux命令查找文件

2018-04-28 09:12:42

Linux

2022-05-25 08:41:48

Linuxfd 命令文件

2010-05-07 15:40:18

ibmdwLinux

2019-11-14 05:00:00

Linux文件磁盤空間

2009-06-26 08:35:48

Linux庫文件操作系統(tǒng)

2018-04-27 13:00:00

數(shù)據(jù)庫MySQL刪除重復(fù)行
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號