找不到任何方法來搜尋包含 100% NULL 的檔案?

找不到任何方法來搜尋包含 100% NULL 的檔案?

我丟失了我的桌面資料夾(那裡有很多東西..也許有 1000 個檔案)。並使用工具立即恢復已刪除的檔案。如果找到所有已刪除的檔案並恢復它們。它們在日期和大小等方面看起來都不錯……所以,我將它們複製回我的桌面資料夾,卻發現裡面的每一個都是 100% NUL。我認為他們甚至沒有任何回車符。只是一長串空值。不過,這些文件的大小是正確的。所以..

幸運的是,我有 1.5 個月前的舊備份,並且能夠恢復大約 80% 的檔案。

但現在我有 20% 的文件,充滿了 NULL,分散在桌面和桌面上的資料夾中。

我不懂Python,也找不到任何工具來識別這些檔案。在我看來,沒有人製作的工具可以找到充滿 100% NUL 00 字符的文件,這似乎很瘋狂?我現在 61 歲了,已經退休了,但我是一名軟體開發人員,我不想僅僅為了這個而學習語言。我嘗試過使用正則表達式搜索 grepWin,並進行了全面搜索,但我發現很多人試圖做同樣的事情但失敗了。

我有一些範例 NUL 檔案可供測試。我在這裡看不到任何上傳它們的方法..

答案1

謝謝保羅。由於某些原因我無法評論你的答案。它說我「必須有 50 點聲譽才能發表評論」。也許是因為我的問題是從 Unix 論壇遷移來的?我不知道..

您的回覆是 grep 指令嗎?如果是這樣,我還需要一些基本的指導。我搜尋了又搜尋並嘗試了 grepWin(我無法找到 100% 空檔),並下載了 grep3.4(但沒有命令工作?也許它需要係統路徑設定?,IDK),並找到了 GnuWin (我認為這不是我想要的,因為它似乎只適用於32 位元系統,而我使用的是Win 10 64)...我也搜尋了初學者教程,但沒有一個展示如何設定Grep 工作..他們都開始向您展示基本指令...

再次感謝您的回覆。討厭成為一個痛苦.. 非常感謝任何幫助,因為我已經嘗試解決這個問題大約 5 天了.. 此時感覺很愚蠢。

答案2

抱歉耽擱了——我沒有收到您的回答通知,因為我以訪客身份發表了評論。

這是一個經過測試的腳本,可能需要一些調整。

#! /bin/bash

    find 2>/dev/null . -type f -size +0c | while IFS= read -r fn; do
        NN="$( head --bytes=128 "${fn}" | tr -d '\0' | wc -c )"
        (( NN > 0 )) && continue

        NN="$( tr -d '\0' < "${fn}" | wc -c )"
        (( NN > 0 )) && continue

        printf "rm -f '%s'\n" "${fn}"
    done

如所寫的,它會建立一個命令清單來刪除目錄樹中完全為 NUL 字元的所有檔案。您可以將該清單重定向到一個檔案中進行檢查,然後只需bash < myRmFile.或者你可以直接放在 | bash完成之後。

外部循環find ...; do ... done從運行它的位置遞歸地搜尋目錄。 find 選項只選擇大小至少為 1 個位元組的常規文件,然後我們一次將名稱讀入變數 fn 中。

接下來的兩行是預先檢查優化器,以節省讀取每個檔案的全部內容。它只檢查前 128 個字節,因為任何合適的檔案都不會有 128 個 NUL 字節,然後還有其他內容。

因此,我們從三個命令的管道中為 NN 分配一個計數。挑選head前 128 個位元組,刪除tr每個 NUL,然後wc -c計算剩下的內容。如果剩下任何非 NUL 位元組,我們將繼續使用下一個檔案名稱。

接下來的兩行執行相同的操作,但針對整個文件,以防我們遇到「不正常」的文件。

任何未通過這兩項檢查的內容都會產生該文件的 rm 指令。

對於某些極端的檔案名稱(名稱中包含單引號或換行符號的檔案名稱)來說,這有點不穩定。它為每個檔案運行一個 rm 進程,但您似乎只有大約 200 個,所以這並不重要。

如果有問題再發文。

相關內容