列出具有特定扩展名的目录中的所有文件

时间:2013-09-16 08:32:53

标签: bash find

假设我想在包含子目录的目录中列出所有php个文件,我可以在bash中运行它:

ls -l $(find. -name *.php -type f)

问题在于,如果根本没有php个文件,执行的命令是ls -l,列出所有文件和目录,而不是没有。

这是一个问题,因为我正在尝试使用

获取所有php个文件的总大小

ls -l $(find . -name *.php -type f) | awk '{s+=$5} END {print s}'

如果没有与*.php模式匹配的文件,最终会返回所有条目的大小。

我如何防范此事件?

3 个答案:

答案 0 :(得分:17)

我建议您首先搜索文件,然后执行ls -l(或其他任何内容)。例如:

find . -name "*php" -type f -exec ls -l {} \;

然后你可以管道awk表达式来进行添加。

答案 1 :(得分:8)

如果您想避免parsing ls获得总大小,可以说:

find . -type f -name "*.php" -printf "%s\n" | paste -sd+ | bc

答案 2 :(得分:1)

这是另一种方法,使用du

find . -name "*.php" -type f -print0 | du -c --files0-from=- | awk 'END{print $1}'