Linux

需要幫助在 linux 上創建目錄的校驗和文件

  • August 6, 2021

我定期將我的數據備份到外部硬碟驅動器,過去,一些文件最終被損壞,直到為時已晚我才注意到它。因此,為了防止這種情況,我想為外部硬碟驅動器上的所有文件創建一個 md5 校驗和。現在隨著時間的推移,新文件可能最終會被添加,而舊文件最終可能會被刪除。我目前正在執行 Linux Mint,並且已經能夠使用以下命令創建一個文本文件,其中包含外部硬碟驅動器上所有文件的 md5 總和:

find '/path/to/backup/' -type f -exec md5sum {} \;>> /path/to/checksum.md5

現在我很久以前從一個網站上得到了這個,我對一切的含義並不是很熟悉,如果有人可以解釋該命令的每個部分的作用,我將不勝感激。話雖如此,上面的命令總是會重新散列整個硬碟驅動器,並且隨著硬碟驅動器的大小增加,完成所需的時間會越來越長。因此,我想找到一種方法來簡單地將新文件附加到硬碟驅動器上,而不必重新開始對整個硬碟驅動器進行雜湊處理。過去,我使用以下命令來執行此操作,並且它似乎工作得很好,直到最近:

find 'path/to/backup' -type f -cnewer 'path/to/old/checksum/' -exec md5sum {} + > path/to/appended/checksum/

sort -k 2 -u /path/to/old/checksum path/to/appended/checksum > path/to/new/checksum.md5

由於某種原因,上面不再找到新添加的文件,並且附加的校驗和文件中沒有條目。任何人都知道如何解決這個問題,或者可能有更好的方法來完成我想要做的事情?

還有一種方法可以使用 find 命令以某種方式掃描備份目錄,忽略 md5 文件中已經存在的任何目錄,只顯示在最後一次校驗和之後添加的文件?

之後的參數-cnewer可能是您的問題:

  • find應該找到比 -cnewer 之後給出的文件的 filedate 更新的文件。
  • 好像你放了一個目錄。所以第一部分應該是:
find 'path/to/backup' -type f -cnewer '/path/to/checksum.md5'

第二部分是exec功能。

  • man find你那裡得到:

-exec command {} ;執行命令(*在您的情況下md5sum*為:),其中字元串{}被目前文件名替換。指定的命令對每個匹配的文件執行一次。

-exec command {} +在選定的文件上執行指定的命令,但命令行是通過在末尾附加每個選定的文件名來建構的;該命令的呼叫總數將遠少於匹配文件的數量。如果find遇到錯誤,這有時會導致立即退出,因此某些待處理的命令可能根本無法執行。

  • 所以問題可能是文件太多,或者在 while 期間find出現錯誤。

因此,我建議:

# Delete file /path/to/appended_checksum.md5 as we 'add' text to it.
rm /path/to/appended_checksum.md5
find 'path/to/backup' -type f -cnewer '/path/to/checksum.md5' -exec md5sum {} \;>> '/path/to/appended_checksum.md5'

sort -k 2 -u '/path/to/checksum.md5' '/path/to/appended_checksum.md5' > path/to/new_checksum.md5

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