我最近開始學習 linux,因為接下來幾個月將有一場 ctf 競賽。我遇到的問題是我正在嘗試制作一個從目錄開始的 bash 腳本,檢查內容是目錄還是其他型別的檔案。如果它是一個檔案,影像等應用strings $f | grep -i 'abcdef'
,如果它是一個目錄 cd 到該目錄并重新開始。我有 C 經驗,我理解邏輯,但我無法真正讓它作業。我無法成功實作通過所有子目錄的回圈。所有幫助將不勝感激!
uj5u.com熱心網友回復:
您不需要此實作的回圈。find命令可以完成您所關心的事情。例如:
find /home -type f -exec sh -c " strings {} | grep abcd " \;
解釋:
/home
你的基本目錄可以是任何東西嗎
-type f
: 表示普通檔案
-exec
從手冊頁:
“執行命令;如果回傳 0 狀態,則為真。所有以下要查找的引數都被視為命令的引數,直到由
;' is encountered. The string
{}' 組成的引數被正在處理的當前檔案名替換為命令引數中出現的任何地方,而不僅僅是在單獨的引數中,如在某些版本的 find 中。這兩種結構可能都需要轉義(使用 `')或參考以保護它們不被 shell 擴展。有關示例,請參見示例部分-exec 選項的使用。指定的命令對每個匹配的檔案運行一次。該命令在起始目錄中執行。使用 -exec 操作存在不可避免的安全問題;您應該改用 -execdir 選項。 "
uj5u.com熱心網友回復:
如果您只想在檔案中查找字串,而不必先查找目錄,然后查找檔案,然后再搜索,則只需使用grep
. 轉到父目錄并執行:
grep -iR "abcd"
或從任何地方,
grep -iR "abcd" /var/log/mylogs/
uj5u.com熱心網友回復:
建議對過濾結果的grep
命令:find
grep "abcd" $(find . -type f)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/469189.html