Filenames

在 Linux 中查找 2 個目錄之間失去的文件名

  • June 7, 2017

我正在嘗試比較 Linux 中的 2 個目錄( A / B )並刪除 B 中不存在於 A 中的任何文件。

例如,如果文件 ‘1.jpg’ 在目錄 B 中存在,但在目錄 A 中不存在,則需要從 B 中刪除它。

我曾嘗試使用 diff,但所有文件本質上都不同,所以它似乎不起作用。(它們是不同大小但具有相同 ID 的縮略圖)。因此,這只能通過文件名來完成,而忽略文件的實際內容。

有人可以闡明如何以最少的努力做到這一點嗎?

rsync可以快速輕鬆地做你想做的事:

rsync --dry-run --verbose --recursive --existing --ignore-existing --delete-after A/ B/

從幫助:

--existing              skip creating new files on receiver
--ignore-existing       skip updating files that already exist on receiver
--delete                delete extraneous files from destination dirs

dry-run在您對建議的結果感到滿意後刪除該選項,以實際執行刪除。


手冊頁對選項有更明確的描述,甚至提到了您的案例:

  --existing, --ignore-non-existing
     This  tells rsync to skip creating files (including directories)
     that do not exist yet on the destination.   If  this  option  is
     combined  with  the  --ignore-existing  option, no files will be
     updated (which can be useful if all you want to do is to  delete
     extraneous files).


  --ignore-existing
     This  tells  rsync  to skip updating files that already exist on
     the destination (this does not ignore  existing  directores,  or
     nothing would get done).  See also --existing.

引用自:https://unix.stackexchange.com/questions/369413