递归浏览bash中的目录和文件+使用wc

时间:2013-03-28 09:34:03

标签: regex bash recursion find wc

我需要递归遍历目录。第一个参数必须是我需要从中开始的目录,第二个参数是描述文件名称的正则表达式。

离。 ./myscript.sh directory "regex"

当脚本递归遍历目录和文件时,它必须使用wc -l来计算regex描述的文件中的行。

如何使用find with -exec来做到这一点?或者还有其他一些方法可以做到这一点?请帮忙。

由于

1 个答案:

答案 0 :(得分:1)

是的,您可以使用find

$ find DIR -iname "regex" -type f -exec wc -l '{}' \; 

或者,如果要计算所有文件中的总行数:

$ find DIR -iname "regex" -type f -exec wc -l '{}' \; | awk '{ SUM += $1 } END { print SUM }'

您的脚本将如下所示:

#!/bin/bash

# $1 - name of the directory - first argument
# $2 - regex - second argument

if [ $# -lt 2 ]; then
  echo Usage: ./myscript.sh DIR "REGEX"
  exit
fi

find "$1" -iname "$2" -type f -exec wc -l '{}' \;

修改 - 如果您需要更多精美的正则表达式,请使用-regextype posix-extended-regex代替-iname,如@sudo_O in his answer所述