簡體   English   中英

如何使用diff命令在目錄中查找具有相同名稱的文件?

[英]How to find files with same name part in directory using the diff command?

我有兩個目錄,其中包含文件。 目錄A包含帶有編號結尾的照片列表(例如janet1.jpg laura2.jpg),目錄B具有相同的文件,但帶有不同編號的結尾(例如janet41.jpg laura33.jpg)。 在忽略編號結尾的情況下,如何從目錄A和B查找沒有相應文件的文件? 例如,在目錄A中有一個rachael3,但在目錄B中沒有rachael \\ d。我認為bash中的diff命令有一種處理方法,但是我看不到一種明顯的方法。

我看不到直接使用diff的方法。 在兩個目錄上使用求和工具( md5sha1等),然后根據第一(求和)列對兩個文件進行排序並比較/比較這些輸出文件可能會更容易。

另外,諸如findimagedupes類的findimagedupes (不像diff或求和檢查那樣簡單的比較)可能是一種更簡單(可能更有用)的解決方案。

似乎您知道您的文件是相同的,如果它們存在並且您確定,每個目錄中只有一種。

因此,要按照此方法diff目錄的內容,只需要獲取文件名的相關部分(“ laura”,“ janet”)。

這可以通過簡單地從ls的輸出中適當地提取適當的部分來完成,如下所示:

ls dir1/ | egrep -o '^[a-A]+'

然后進行比較,假設dir1dir2 ,您可以使用:

diff <(ls dir1/ | egrep -o '^[a-A]+') <(ls dir2/ | egrep -o '^[a-A]+')

假設文件被簡單地重命名並且在其他方​​面相同,找到丟失的文件的簡單解決方案是使用md5sum (或sha或諸如此類)和uniq

#!/bin/bash

md5sum A/*.jpg B/*.jpg >index 
awk '{print $1}' <index | sort >sums # delete dir/file

# list unique files (missing from one directory)
uniq -u sums | while read s; do
    grep "$s" index | sed 's/^[a-z0-9]\{32\}  //'
done

如果文件夾包含重命名的同一文件的多個副本(例如,哈希與一個文件夾中的多個文件匹配),則此操作將失敗,但是可以輕松解決:

#!/bin/bash

md5sum A/*.jpg B/*.jpg > index
sed 's/\/.*//' <index | sort >sums # just delete /file

# list unique files (missing from one directory)
uniq sums | awk '{print $1}' |\
uniq -u | while read s junk; do
    grep "$s" index | sed 's/^[a-z0-9]\{32\}  //'
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM