我想知道如何搜尋特定文件類型:我已進入 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
一種可能的解決方案可能是這樣的:使用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 檔案。