如何确定ls命令输出是文件还是目录Bash

时间:2018-12-19 13:11:08

标签: linux bash

ls命令输出当前目录中包含的所有内容。例如ls -la将输出类似这样的

drwxr-xr-x  3   user  user  4096  dec  19  17:53  .
drwxr-xr-x 15   user  user  4096  dec  19  17:39  ..
drwxrwxr-x  2   user  user  4096  dec  19  17:53  tess  (directory)
-rw-r--r--  1   user  user   178  dec  18  21:52  file  (file)
-rw-r--r--  1   user  user    30  dec  18  21:47  text  (file)

如果我想知道所有文件占用多少空间该怎么办。为此,我必须用ls -la | awk '{ sum+=$5 } END{print sum}'从所有行中总计5美元。那么,如何只对文件大小求和而不留目录呢?

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

find . -maxdepth 1 -type f -printf '%s\n' | awk '{s+=$1} END {print s}'

find命令选择当前目录中的所有文件并输出它们的大小。 awk命令将整数相加并输出总数。

答案 1 :(得分:0)

不要。

https://unix.stackexchange.com/questions/128985/why-not-parse-ls-and-what-do-to-instead是我见过的关于SO引用最多的页面之一。

话虽如此,但作为进一步发展的暗示,ls -l | awk '/^-/{s+=$5} END {print s}'可能会满足您的要求。