簡體   English   中英

從目錄層次結構中的文件遞歸搜索和輸出字符串

[英]Recursively search and output string from files in a directory hierarchy

如何編寫shell腳本來遍歷給定目錄下的所有子目錄,並在每個子目錄中搜索名為“copyright”的文件,查找“license”或“GPL”等字符串,並打印出那些子串。 運行后,我應該能夠告訴我們找到的每個版權文件的結果。

使用find with -exec

find . -name copyright -exec grep -H -e "license" -e "GPL" '{}' + >> results

命令

使用grep和Bash的** (globstar,用於深度擴展):

shopt -s globstar; # enable ** support
grep -i -E 'licence|GPL' **/copyright

說明

  • globstar

如果設置,則路徑名擴展上下文中使用的模式**將匹配所有文件以及零個或多個目錄和子目錄。 如果模式后跟一個/,則只有目錄和子目錄匹配。

  • -E , - --extended-regexp

將PATTERN解釋為擴展正則表達式(ERE,見下文)。 (-E由POSIX指定。)

參考

這是我用於為FreeBSD主機生成“許可證報告”的一種令人尷尬的腳本。 我通過為anubhava的-exec切換xargs來加快速度。 謝謝!

#!/bin/sh
#
# pkg_license_check
#
# TODO: make this report on unlicensed packages.
#
LICENSES='MIT GPL ART BSD'

for LICENSE in $LICENSES
do

 cd /usr/local/share/licenses
 num=`find . -name LICENSE -exec grep -e "$LICENSE" '{}' + | wc -l`
 echo "Total of $num $LICENSE  Licensed packages as follows:"
 find . -name LICENSE -exec grep -e "$LICENSE" -e '{}' + | awk -F":" '{sub("^\.\/", "", $1); print "\n" $1 "\n" $2 $3}'
 echo -e "\n\n------------------------------------------------------------------------- \n\n"

done

一天的項目RSN:在perl中重寫並使用插件為不同的包裝系統制作“POSIX跨平台”。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM