Sed

使用 find & sed 查找具有給定 shebang 行的所有腳本

  • October 14, 2021

我想找出所有帶有特定 shebang 行的腳本。具體來說,我想要所有符合以下條件的文件:

  • 它主要是一個純文字文件(創建的東西gzexe看起來不太友好)
  • 第 1 行僅包含#!/bin/shor #! /bin/sh(帶空格)

我想用find,sedgrep(file可用) 來做到這一點。

文件名是沒有用的,因為有些腳本沒有副檔名,甚至有錯誤的副檔名。還有一個something.sh可能有一個shebang線,#!/bin/bash這也不是我想要的。

此外,有時我會遇到這樣的文件:


#!/bin/sh
等等等等等等...

第 1 行是空的,shebang 位於第 2 行,這不是我想要的。

我能夠找到 shebang 行,find|grep但我不知道如何在文件的第一行專門查找行。

感謝您提前提供任何幫助。

如果你有 GNU grep

grep -rIzl '^#![[:blank:]]*/bin/sh' ./

我已將多個答案合併到我的版本中:

find -type f -exec \
 sh -c 'head -n1 "$1" | grep -q "^#![[:blank:]]*/bin/sh"' _ {} \; \
 -print
  • 取自神經元,它用於find -type f -exec獲取所有文件並在其上執行命令。
  • 取自 user218374,它用於head -n1僅獲取第一行並grep -q僅用於獲取 RC。
  • 取自 Costas,它用於[[:blank:]]*處理空格和製表符。
  • 避免使用echofrom 神經元,而是使用 find 的-print指令。

引用自:https://unix.stackexchange.com/questions/355371