10

假设我想列出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模式匹配的文件,最终会返回所有条目的大小。

我该如何防范此事件?

4

3 回答 3

19

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

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

然后你可以通过管道awk表达来进行加法。

于 2013-09-16T08:33:40.277 回答
8

如果你想避免解析 ls来获得总大小,你可以说:

find . -type f -name "*.php" -printf "%s\n" | paste -sd+ | bc
于 2013-09-16T08:38:15.143 回答
1

这是另一种方式,使用du

find . -name "*.php" -type f -print0 | du -c --files0-from=- | awk 'END{print $1}'
于 2013-09-16T09:11:09.930 回答