我需要递归地浏览目录。第一个参数必须是我需要从其中开始的目录,第二个参数是描述文件名的正则表达式。
前任。./myscript.sh directory "regex"
当脚本递归遍历目录和文件时,它必须使用 wc -l 来计算正则表达式描述的文件中的行数。
我如何使用 find 和 -exec 来做到这一点?或者可能有其他方法可以做到这一点?请帮忙。
谢谢
是的,您可以使用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
and-regex
而不是-iname
@sudo_O在他的回答中指出的那样。