如何在單獨的目錄中尋找不重複的文件

如何在單獨的目錄中尋找不重複的文件

我有一份舊的文件備份。在我目前的Documents目錄中,存在著許多這樣的文件在不同的地點有不同的名字。我正在嘗試找到一種方法來顯示備份中存在哪些文件不是存在於Documents目錄中,最好是好的和 GUI-y,這樣我可以輕鬆地概述很多的文件。

當我搜尋這個問題時,很多人都在尋找相反的方法。有類似的工具FS林特騙術大師,但它們顯示重複項。沒有反轉模式。

答案1

如果您準備好使用 CLI,則以下命令應該適合您:

diff --brief -r backup/ documents/

這將顯示每個資料夾特有的檔案。如果您願意,也可以使用以下命令忽略檔名大小寫--ignore-file-name-case

舉個例子:

ron@ron:~/test$ ls backup/
file1  file2  file3  file4  file5
ron@ron:~/test$ ls documents/
file4  file5  file6  file7  file8
ron@ron:~/test$ diff backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8
ron@ron:~/test$ diff backup/ documents/ | grep "Only in backup"
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3

此外,如果您只想在文件不同時報告(而不報告實際的「差異」),則可以使用--brief以下選項:

ron@ron:~/test$ cat backup/file5 
one
ron@ron:~/test$ cat documents/file5
ron@ron:~/test$ diff --brief backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Files backup/file5 and documents/file5 differ
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8

有幾種視覺差異工具meld可以做同樣的事情。您可以meld透過以下方式從 Universe 儲存庫安裝:

sudo apt-get install meld

並使用其“目錄比較”選項。選擇您要比較的資料夾。選擇後,您可以並排比較它們:

在此輸入影像描述

fdupes是一個查找重複文件的優秀程序,但它沒有列出您正在尋找的非重複文件。但是,我們可以使用和fdupes的組合列出輸出中沒有的檔案。findgrep

以下範例列出了backup.

ron@ron:~$ tree backup/ documents/
backup/
├── crontab
├── dir1
│   └── du.txt
├── lo.txt
├── ls.txt
├── lu.txt
└── notes.txt
documents/
├── du.txt
├── lo-renamed.txt
├── ls.txt
└── lu.txt

1 directory, 10 files
ron@ron:~$ fdupes -r backup/ documents/ > dup.txt
ron@ron:~$ find backup/ -type f | grep -Fxvf dup.txt 
backup/crontab
backup/notes.txt

答案2

我對許多非常大的文件也遇到了同樣的問題,並且有很多針對重複的解決方案,但沒有針對反向搜尋的解決方案,而且由於數據量很大,我也不想搜尋內容差異。

所以我寫了這個 python 腳本來搜尋“isolated-files”

isolated-files.py --source folder1 --target folder2

這將顯示folder2 中不在folder1 中的所有檔案(遞歸地)(也是遞歸地)。也可用於 ssh 連線和多個資料夾。

https://github.com/ezzra/isolated-files

答案3

我認為將舊備份與數千個文件合併(存檔在具有不同名稱的不同目錄下)的最佳工作流程是使用愚人大師畢竟。它看起來很像重複項選項卡來自FS林特,但它還有一個額外重要的功能,就是添加來源'參考'

  1. 新增您的目標目錄(例如~/Documents)新增為參考
    • A參考是唯讀的,不會刪除任何文件
  2. 將您的備份目錄新增為普通的
  3. 尋找重複項。刪除從備份中找到的所有重複項。
  4. 備份目錄中只剩下唯一的檔案。使用免費文件同步或者梅爾德合併它們,或手動合併。

如果您有多個舊的備份目錄,請先像這樣合併最新的備份目錄,然後使用該備份目錄作為參考在將舊備份合併到主文件目錄之前清除舊備份中的重複項。這可以確保很多您不必刪除要丟棄的唯一文件,而是從備份中合併。

請記住在銷毀過程中的所有舊備份後進行新備份。 :)

答案4

jdupes為此有兩個有用的選項:-I --isolate-u --print-unique

例如,僅列出backup目錄中的唯一檔案:

jdupes -Iru Documents backup |grep '^backup

相關內容