我需要递归遍历目录。第一个参数必须是我需要从中开始的目录,第二个参数是描述文件名称的正则表达式。
离。 ./myscript.sh directory "regex"
当脚本递归遍历目录和文件时,它必须使用wc -l来计算regex描述的文件中的行。
如何使用find with -exec来做到这一点?或者还有其他一些方法可以做到这一点?请帮忙。
由于
答案 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所述