[英]How can I traverse a directory tree using a bash or Perl script?
我有興趣進入bash腳本,並想知道如何遍歷unix目錄並記錄當前正在查看的文件的路徑,如果它符合正則表達式標准。
它會是這樣的:
Bash或Perl腳本很好,雖然我更喜歡你如何使用帶有grep , awk等命令的bash腳本來實現這一點。
find . -type f -print0 | xargs -0 grep -l -E 'some_regexp' > /tmp/list.of.files
重要部分:
使用xargs的好處是,如果你的目錄包含很多文件,你可以通過並行來加速這個過程:
find . -type f -print0 | xargs -0 -P 5 -L 100 grep -l -E 'some_regexp' > /tmp/list.of.files
這將以5個單獨的副本運行grep命令,每個副本掃描另一組最多100個文件
使用find和grep
find . -exec grep -l -e 'myregex' {} \; >> outfile.txt
grep上的-l
只獲取文件名
-e
on the grep指定正則表達式
{}
將find命令找到的每個文件放在grep命令的末尾
>> outfile.txt
附加到文本文件
grep -l -R <regex> <location>
應該完成這項工作。
如果你想在Perl中執行此操作,可以使用人們建議的find
命令並將它們轉換為帶有find2perl
的Perl腳本:
如果你有:
$ find ...
做那個
$ find2perl ...
這會輸出一個執行相同操作的Perl程序。 從那里開始,如果你需要在Perl中做一些簡單但在shell中很難的東西,你只需要擴展Perl程序。
find /path -type f -name "*.txt" | awk '
{
while((getline line<$0)>0){
if(line ~ /pattern/){
print $0":"line
#do some other things here
}
}
}'
類似的線程
find /path -type f -name "outfile.txt" | awk '
{
while((getline line<$0)>0){
if(line ~ /pattern/){
print $0":"line
}
}
}'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.