Windows または Linux で 16 進数 00 00 FF FF で始まるファイルを再帰的に検索して削除します。

Windows または Linux で 16 進数 00 00 FF FF で始まるファイルを再帰的に検索して削除します。

客観的:

フォルダとすべてのサブフォルダで、最初の 4 バイトが 16 進シーケンス 00 00 FF FF で始まるファイル (例: *.dat) を検索し、ファイルを削除するたびに確認メッセージを表示せずに一致するすべてのファイルを削除します。

例えば:

Linuxではgrep + find + hexdump + rmの組み合わせを考えていました

例えば:

rm -r 一致したファイルを再帰的に削除する

hexdump -n4 *.dat はファイルの最初の4バイトを抽出します。

grep '\x00\x00\xFF\xFF' *.dat を実行して、返された 16 進ダンプ 00 00 FF FF に一致するファイルを検索します。

--重要-- 最初の 4 バイトにのみ 16 進数の 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' | hexdump -n4 *.dat

必要なコマンドをすべてパイプする方法がわかりません。

それを実行する方法について何かアイデアはありますか?

前もって感謝します!

答え1

このようなもの:

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

スローモーション:

  • find . -type f現在のディレクトリの下にあるすべてのプレーンファイルを検索します
  • これらの各ファイルに対して、hexdump -n4 $1 | grep -q "^0000000 0000 ffff"ファイルが次の文字で始まる場合は0を返す1行のbashコマンドを実行します。00 00 FF FF
  • findで開始されたコマンドが-execrc=0 を返さない場合は次のファイルにスキップし、それ以外の場合はそのファイルに対するフィルターまたはアクションの実行を続行します。次のフィルターまたはアクションは、-delete前のフィルターが失敗しなかった場合にのみ実行されます。

これを使用すると、ファイルを削除せずに、代わりにファイルの名前を表示する手法を試すことができます。

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

関連情報