2

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

前任。./myscript.sh directory "regex"

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

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

谢谢

4

1 回答 1

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-extendedand-regex而不是-iname@sudo_O在他的回答中指出的那样。

于 2013-03-28T09:35:23.687 回答