Rumah > Operasi dan penyelenggaraan > operasi dan penyelenggaraan linux > Cari fail pendua menggunakan Linux

Cari fail pendua menggunakan Linux

Lepaskan: 2023-08-03 15:51:00
ke hadapan
1944 orang telah melayarinya

. Atas dasar mencari, kita boleh menggabungkannya dengan perintah Linux asas lain (seperti perintah xargs) untuk mencipta fungsi baris perintah tanpa had Contohnya, kita boleh mencari fail dalam folder Linux dan subfoldernya dengan cepat. Proses untuk melaksanakan fungsi ini agak mudah Hanya cari dan lintasi semua fail, dan kemudian gunakan arahan untuk membandingkan MD5 setiap fail.

Bunyinya abstrak, tetapi sebenarnya hanya ada satu arahan:
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
Salin selepas log masuk
find -not -empty -type f -printf "%sn" bermaksud menggunakan arahan find untuk mencari semua fail yang tidak kosong dan kemudian cetak saiznya
sort -rn Tidak perlu dikatakan, arahan ini adalah untuk membalikkan jenis mengikut saiz fail
Cari fail pendua menggunakan Linux
uniq -d | xargs -I{} -n1 find -type f -size }c -print0 bermaksud bahawa hanya baris berulang dicetak Gunakan di sini untuk mencetak fail dengan nama fail yang sama

uniq -w32 –all-repeated=separate Akhirnya, ini bermakna mencetak 32 bait pertama MD5. Sebaliknya, keseluruhan proses menapis fail pendua menggunakan baris arahan adalah sangat mudah dan mudah.
  • Kaedah 2: Gunakan alat dupeGuru
  • DupeGuru ialah aplikasi merentas platform dengan versi Linux, Windows dan Mac OS X Ia boleh membantu pengguna mengetahui Linux melalui pelbagai kriteria seperti saiz fail, MD5 dan nama fail . Fail pendua dalam . Pengguna Ubuntu boleh memasangnya terus dengan menambahkan sumber PPA berikut:
  • sudo add-apt-repository ppa:hsoft/ppasudo apt-get updatesudo apt-get install dupeguru*
    Salin selepas log masuk

    方法三:使用Find命令解析

    在工作生活当中,我们很可能会遇到查找重复文件的问题。比如从某游戏提取的游戏文本有重复的,我们希望找出所有重复的文本,让翻译只翻译其中一份,而其他的直接替换。那么这个问题该怎么做呢?当然方法多种多样,而且无论那种方法应该都不会太难,但笔者第一次遇到这个问题的时候第一反应是是用Linux的Shell脚本,所以文本介绍这种方式。

    先上代码:

    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-
    Salin selepas log masuk

    大家先cd到自己想要查找重复文件的文件夹,然后copy上面代码就可以了,系统会对当前文件夹及子文件夹内的所有文件进行查重。

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

    首先看第一句:

    find -not -empty -type f -printf "%sn"
    Salin selepas log masuk

    find是查找命令;-not -empty是要寻找非空文件;-type f是指寻找常规文件;-printf “%sn”比较具有迷惑性,这里的%s并非C语言中的输出字符串,它实际表示的是文件的大小,单位为bytes(不懂就man,man一下find,就可以看到了),n是换行符。所以这句话的意思是输出所有非空文件的大小。

    搜索公众号GitHub猿后台回复“UML”,获取一份惊喜礼包。

    通过管道,上面的结果被传到第二句:

    sort -rn
    Salin selepas log masuk

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

    第三句:

    uniq -d
    Salin selepas log masuk

    uniq是把重复的只输出一次,而-d指只输出重复的部分(如9出现了5次,那么就输出1个9,而2只出现了1次,并非重复出现的数字,故不输出)。

    第四句:

    xargs -I{} -n1 find -type f -size {}c -print0
    Salin selepas log masuk

    这一部分分两部分看,第一部分是xargs -I{} -n1,xargs命令将之前的结果转化为参数,供后面的find调用,其中-I{}是指把参数写成{},而-n1是指将之前的结果一个一个输入给下一个命令(-n8就是8个8个输入给下一句,不写-n就是把之前的结果一股脑的给下一句)。后半部分是find -type f -size {}c -print0,find指令我们前面见过,-size{}是指找出大小为{}bytes的文件,而-print0则是为了防止文件名里带空格而写的参数。

    第五句:

    xargs -0 md5sum
    Salin selepas log masuk

    xargs我们之前说过,是将前面的结果转化为输入,那么这个-0又是什么意思?man一下xargs,我们看到-0表示读取参数的时候以null为分隔符读取,这也不难理解,毕竟null的二进制表示就是00。后面的md5sum是指计算输入的md5值。

    第六句:sort是排序,这个我们前面也见过。

    第七句:

    uniq -w32 --all-repeated=separate
    Salin selepas log masuk

    uniq -w32是指寻找前32个字符相同的行,原因在于md5值一定是32位的,而后面的--all-repeated=separate是指将重复的部分放在一类,分类输出。

    第八句:

    cut -b 36-
    Salin selepas log masuk

    由于我们的结果带着md5值,不是很好看,所以我们截取md5值后面的部分,cut是文本处理函数,这里-b 36-是指只要每行36个字符之后的部分。

    我们将上述每个命令用管道链接起来,存入result.txt:

    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
    Salin selepas log masuk

    虽然结果很好看,但是有一个问题,这是在Linux下很好看,实际上如果有朋友把输出文件放到Windows上,就会发现换行全没了,这是由于Linux下的换行是n,而windows要求nr,为了解决这个问题,我们最后执行一条指令,将n转换为nr:

    cat result.txt | cut -c 36- | tr -s 'n'
    Salin selepas log masuk

Atas ialah kandungan terperinci Cari fail pendua menggunakan Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:Linux中文社区
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan