Sed
使用 find & sed 查找具有給定 shebang 行的所有腳本
我想找出所有帶有特定 shebang 行的腳本。具體來說,我想要所有符合以下條件的文件:
- 它主要是一個純文字文件(創建的東西
gzexe
看起來不太友好)- 第 1 行僅包含
#!/bin/sh
or#! /bin/sh
(帶空格)我想用
find
,sed
和grep
(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:]]*
處理空格和製表符。- 避免使用
echo
from 神經元,而是使用 find 的