客觀的:
搜尋資料夾和所有子資料夾中前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" {} \;