我想找到我的伺服器上第一行或第二行包含超過 N 個字元的所有 php 檔案。
我想列印檔案名稱和找到的行內容。
我該怎麼做?我正在考慮執行 grep,但我不知道如何用它來分析檔案上的行。
答案1
這是一種方法:
MIN_WIDTH=30
for f in $(find / -iname '*\.php'); do
if [ $(head -n 2 "$f" | tail -n 1 | wc -c) -gt $MIN_WIDTH ] || [ $(head -n 1 "$f" | wc -c) -gt $MIN_WIDTH ]; then
echo "$f";
fi
done
這是一個細分:
- 尋找所有
.php
文件:find / -regex '.*\.php$'
- 取得文件的第二行並計算字元數:
head -2 "$f" | tail -1 | wc -c
- 取得檔案的第一行並計算字元數:
head -1 "$f" | wc -c
- 比較每個是否大於 $MIN_WIDTH:`[ $(…) -gt $MIN_WIDTH ]
- 如果其中任何一個大於
$MIN_WIDTH
:if […] | […]
- 列印出檔案名稱:
echo "$f"
答案2
比 zmo 稍短的變體
find -iname "*.php" -exec grep -HP '.{6,}' {} \; | grep -P '^.+:[12]:'
其中 6 是最小字元數。該-H
選項是列印檔案名,即使僅對檔案進行 grep 處理(就是這種情況,因為每個找到的檔案都透過運算符單獨進行 grep 處理{}
)