![](/img/trans.png)
[英]How to exclude multiple subdirectories (same directory name) when using find command to delete files older than 30 days in a batch file?
[英]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
的方法。 在兩個目錄上使用求和工具( md5
, sha1
等),然后根據第一(求和)列對兩個文件進行排序並比較/比較這些輸出文件可能會更容易。
另外,諸如findimagedupes
類的findimagedupes
(不像diff
或求和檢查那樣簡單的比較)可能是一種更簡單(可能更有用)的解決方案。
似乎您知道您的文件是相同的,如果它們存在並且您確定,每個目錄中只有一種。
因此,要按照此方法diff
目錄的內容,只需要獲取文件名的相關部分(“ laura”,“ janet”)。
這可以通過簡單地從ls
的輸出中適當地提取適當的部分來完成,如下所示:
ls dir1/ | egrep -o '^[a-A]+'
然后進行比較,假設dir1
和dir2
,您可以使用:
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.