假设我想在包含子目录的目录中列出所有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
模式匹配的文件,最终会返回所有条目的大小。
我如何防范此事件?
答案 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}'