在海量檔案中搜尋特定的魔法字節

在海量檔案中搜尋特定的魔法字節

我想知道如何搜尋特定文件類型:我已進入 SSH 伺服器並嘗試搜尋文件.jpg,但伺服器的所有者(我的老師)已刪除所有擴展名。

我已經嘗試過grep -lr "JFIF",發現許多具有相同檔案名稱的目錄,因此我跳到使用該grep命令找到的隨機目錄,並嘗試cat在其上使用該命令,但終端無法顯示整個二進位檔案。

另外該strings命令在ssh伺服器上被阻止,我的老師說你必須找到一個jpg文件,並且這個文件包含一個序號(SN),但我不知道在哪裡可以找到它。

如果你們想要 SSH 基數,我很樂意將它們送給你們,無論如何我的老師說你們可以使用命令file來做到這一點,但我不知道該怎麼做。

順便一提:他說(SN)

答案1

我會盡力給您一些提示,以便您可以自己解決硬體問題。

請依照以下步驟操作:

  1. file透過執行 來閱讀手冊man file
  2. 然後嘗試一下file somefile,看看會發生什麼
  3. 嘗試file在不同的文件類型上執行
  4. 現在您應該能夠了解如何確定某個檔案是否是 jpeg 映像。
  5. 現在閱讀手冊find(或使用Google來了解如何使用它來查找某個目錄和所有子目錄中的所有文件)
  6. 現在了解如何使用-exec選項find來將其與先前使用的file命令連接起來
  7. 現在您應該能夠找到所需目錄中所有文件的文件類型並列出它們
  8. 現在閱讀有關管道|grep命令的信息,以了解如何僅過濾 JPEG 檔案。

答案2

首先,我要感謝@incBrain和@Serg沒有直接回答我的問題,這幫助我理解了很多新東西:)。

我的任務是找到一個.jpg刪除了擴展名的特定文件,我首先想到的是.jpg 魔法位元組這是JFIF,並且透過 @incBrain 指令,我能夠建立這個命令

find / -exec file {} \; | grep "JFIF"

該行將find命令連結到file命令,然後獲取兩個&命令-exec的輸出,並將其作為輸入通過命令的管道符號傳輸,該命令僅顯示其二進位檔案中包含的文件,即.findfile|grepJFIF.jpg files

我的問題實際上是找到一個特定的序號,起初我認為序號包含在檔案的二進位檔案中,但這是錯誤的,然後我想到了一個瘋狂的想法

哦!為什麼我不看看圖片是什麼樣的,我的意思是如果我找不到序號,得到圖片會是一件好事

我在網路上搜尋了一種將檔案從 SSH 傳輸到我的機器的好方法,我發現這段程式碼很有效!

scp [email protected]:/home/example/file.txt /Local_Directory

我希望這個答案對將來的人有幫助:)。

答案3

一種可能的解決方案可能是這樣的:使用find它遞歸地列出常規文件(-type f),並對file每個文件執行命令。將輸出重定向到grep以過濾掉文件類型。

然而在這裡,我想做一些比這更有趣的事;更尷尬,但更有趣。

$ find .  -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \;  | awk '/d8ff e0ff 1000 464a/{print $1}'

您可能知道也可能不知道每個檔案都有前 8 個位元組指定檔案類型。因此,find我們可以搜尋所有常規文件,列印其名稱,然後執行 hexdump 來提取前 8 個字節,並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 檔案。

相關內容