特定のファイルタイプを検索する方法を知りたいです。SSH サーバーにアクセスして.jpg
ファイルを検索しようとしていますが、サーバーの所有者 (私の先生) がすべての拡張子を削除しています。
試してみたところgrep -lr "JFIF"
、同じファイル名のディレクトリが多数見つかったため、コマンドで見つかったランダムなディレクトリにジャンプしgrep
、そのディレクトリでコマンドを使用しようとしましたcat
が、ターミナルでバイナリ全体を表示できませんでした。
また、strings
コマンドは ssh サーバー上でブロックされています。先生は、jpg ファイルを見つける必要があり、このファイルにはシリアル番号 (SN) が含まれていると言っていましたが、どこで見つけられるのかわかりません。
SSH カーディナルが必要な場合は喜んでお渡しします。とにかく、私の先生は、コマンドを使用してfile
それを実行できると言っていましたが、方法がわかりません。
ところで、彼はこう言った (SN)
答え1
自分で問題を解けるように、いくつかヒントを提供したいと思います。
次の手順に従ってください:
file
を実行してのマニュアルを読んでくださいman file
。- 試してみて
file somefile
何が起こるか見てみましょう file
異なるファイルタイプで実行してみる- ここまでで、あるファイルが jpeg 画像であるかどうかを確認する方法が理解できたはずです。
- マニュアルを読んでください
find
(または、Google を使用して、特定のディレクトリとすべてのサブディレクトリ内のすべてのファイルを検索する方法を調べてください)。 - 以前使用したコマンドと接続するために
-exec
オプションを使用する方法を確認しますfind
file
- これで、必要なディレクトリ内のすべてのファイルのファイルタイプを見つけてリストできるはずです。
- 次に、パイプ
|
とgrep
コマンドについて読んで、JPEG ファイルのみをフィルタリングする方法を確認します。
答え2
まず最初に、私の質問に直接答えなかったことで多くの新しいことを理解することができた@incBrainと@Sergに感謝したいと思います :)。
.jpg
私の仕事は拡張子が削除された特定のファイルを見つけることでした。最初に思いついたのは.jpg
マジックバイトこれはJFIF
、@incBrainの指示に従って、このコマンドを構築できました。
find / -exec file {} \; | grep "JFIF"
その行は、コマンドをコマンドfind
にリンクし、両方の&コマンドの出力を取得し、バイナリに含まれるファイルのみを表示するコマンドのパイプ記号を介して入力として転送します。file
-exec
find
file
|
grep
JFIF
.jpg files
私の問題は、実際のところ、特定のシリアル番号を見つけることでした。最初は、シリアル番号はファイルのバイナリに含まれていると思っていましたが、それは間違っていました。その後、奇妙な考えが頭に浮かびました。
ああ!写真がどんなものか見てみましょう。シリアル番号が見つからない場合は、写真を入手することをお勧めします。
SSH から自分のマシンにファイルを転送する良い方法をインターネットで検索したところ、うまく機能するこのコード ブロックを見つけました。
scp [email protected]:/home/example/file.txt /Local_Directory
この回答が将来誰かの役に立つことを願っています :)。
答え3
考えられる解決策の 1 つは、次のとおりです。whichfind
を使用して通常のファイルを再帰的にリストし ( -type f
)、file
各ファイルに対してコマンドを実行します。出力を にリダイレクトして、grep
ファイル タイプを除外します。
しかし、ここでは、それよりももっと楽しいこと、もっとぎこちないけれど、もっと楽しいことをしたいと思っています。
$ find . -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \; | awk '/d8ff e0ff 1000 464a/{print $1}'
ご存知かもしれませんが、すべてのファイルfind
には、ファイルタイプを指定する最初の 8 バイトがあります。したがって、を使用してすべての通常のファイルを検索し、その名前を出力しますが、その後、最初の 8 バイトを抽出して hexdump を実行し、awk
最初の 8 バイトを持つファイル名のみをフィルター処理します。
ここに小さな証拠があります:
$ hexdump -n 10 1450763029649.jpg
0000000 d8ff e0ff 1000 464a 4649
000000a
$ hexdump -C -n 10 1450763029649.jpg
00000000 ff d8 ff e0 00 10 4a 46 49 46 |......JFIF|
0000000a
答え4
file * | grep -i "jpeg"
これにより、ディレクトリ内のすべてのファイルが検索され、そのファイル タイプが返されます。パイプを介して|
、これらの結果は grep によって検索され、ファイル タイプが "jpeg" のファイル、つまり基本的に .jpg ファイルであるファイルが検索されます。