在 Windows 或 Linux 中遞歸搜​​尋並刪除以十六進位 00 00 FF FF 開頭的文件

在 Windows 或 Linux 中遞歸搜​​尋並刪除以十六進位 00 00 FF FF 開頭的文件

客觀的:

搜尋資料夾和所有子資料夾中前4 個位元組以十六進位序列00 00 FF FF 開頭的文件(例如:*.dat),並刪除所有匹配的文件,而不在每個文件刪除時提示確認

例如:

在linux中我正在考慮組合grep + find + hexdump + rm

例如:

rm -r 遞歸刪除符合的文件

hexdump -n4 *.dat 提取檔案的前 4 個位元組

grep '\x00\x00\xFF\xFF' *.dat 尋找與傳回的 hexdump 00 00 FF FF 相符的文件

--重要--僅檢查前 4 個位元組是否有十六進位 00 00 FF FF!

文件中是否有 00 00 FF FF 或其他任何地方都沒有並不重要! (只需要檢查前4個位元組)

另外,請記住它必須掃描當前資料夾及其所有子資料夾中的所有 *.dat 文件

而 00 00 FF FF 必須嚴格按照這個順序

如果這在 Windows 上可行的話,這是最好的解決方案(即使需要使用第三方實用程式)。但很高興有一個在 Linux 上運行的解決方案

我嘗試了以下命令,但它什麼也沒返回,並且我確信存在以 0000FFFF 開頭的 *.dat 文件

rm -r | grep '\x00\x00\xFF\xFF' |十六進位轉儲-n4 *.dat

我不知道如何透過管道傳輸所有必需的命令。

關於如何做到這一點有什麼想法嗎?

先致謝!

答案1

像這樣的東西:

find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -delete;

慢動作:

  • find . -type f將搜尋目前目錄下的所有純文件
  • 在每個檔案上,它將執行一行 bash 命令,hexdump -n4 $1 | grep -q "^0000000 0000 ffff"如果檔案以以下內容開頭,則傳回 000 00 FF FF
  • find如果開始的命令-exec未以 rc=0 返回,則跳到下一個文件,否則它將繼續執行該文件的過濾器或操作,下一個文件-delete僅在前一個過濾器未失敗時才執行。

您可以使用它來嘗試該技術而不刪除檔案並顯示它們的名稱:

find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -exec printf "Would delete: %s\n" {} \;

相關內容