答案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
的組合列出輸出中沒有的檔案。find
grep
以下範例列出了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 連線和多個資料夾。
答案3
我認為將舊備份與數千個文件合併(存檔在具有不同名稱的不同目錄下)的最佳工作流程是使用愚人大師畢竟。它看起來很像重複項選項卡來自FS林特,但它還有一個額外重要的功能,就是添加來源'參考'。
- 新增您的目標目錄(例如
~/Documents
)新增為參考。- A參考是唯讀的,不會刪除任何文件
- 將您的備份目錄新增為普通的。
- 尋找重複項。刪除從備份中找到的所有重複項。
- 備份目錄中只剩下唯一的檔案。使用免費文件同步或者梅爾德合併它們,或手動合併。
如果您有多個舊的備份目錄,請先像這樣合併最新的備份目錄,然後使用該備份目錄作為參考在將舊備份合併到主文件目錄之前清除舊備份中的重複項。這可以確保很多您不必刪除要丟棄的唯一文件,而是從備份中合併。
請記住在銷毀過程中的所有舊備份後進行新備份。 :)
答案4
jdupes
為此有兩個有用的選項:-I --isolate
和-u --print-unique
。
例如,僅列出backup
目錄中的唯一檔案:
jdupes -Iru Documents backup |grep '^backup