如何计算目录中的文件数,但不递归


30

我确定一个简单的问题。我已经看到一个答案该答案显示了如何执行此操作(包括子目录),但我想知道仅在当前目录中有多少个文件(而非文件夹)。谢谢。

Answers:


60
ls -F |grep -v / | wc -l
  1. ls -F 列出所有文件并将指示符(* / => @ |之一)附加到条目
  2. grep -v /保留所有包含斜杠的 字符串
  3. wc -l 数线

除目录外的所有内容的列表。
2013年

非常感谢您对此进行分解并解释各部分,感谢您的有效解释。
bcsteeve

1
虽然所有答案都可以解决我的问题,但我选择的是它的文档记录,最容易理解。但是,谢谢大家!
bcsteeve

15

尝试以下oneliner:

find -maxdepth 1 -type f | wc -l

这很好,只有文件,没有其他:-)
thom

这将跳过链接和特殊字符设备。
ojblass

这里的所有答案都很棒!首先,谢谢。第二...我该如何选择?
bcsteeve

6

尝试这个

ls -al | grep ^[-] | wc -l
  1. ls -al -以长列表格式列出所有文件
  2. grep ^[-] -当带有ls -al的列表文件时,搜索以“-”开头的字符串,该字符串是表示常规文件的符号
  3. wc -l -数行

软链接呢?硬链接文件呢?

不错,只有文件和链接,仅此而已。
2013年

对于软/硬链接,请替换-l
andr3w,2013年

非常感谢您对此进行分解并解释各部分,感谢您的有效解释。
bcsteeve

2

我只想添加thom的答案,因为我喜欢和Bash一起玩。它去了:

echo "Directory $(pwd) has $(ls -F |grep -v / | wc -l) files"

贝娄是我的/data目录的示例结果:

Directory /data has 580569 file(s).

以下是我的解释:

  1. echo double-quoted-message 将打印出理想的消息。
  2. $(any-desirable-valid-command)在的双引号echo中将显示相关命令执行的结果。
  3. pwd 将打印当前目录。
  4. ls -F用于列出所有文件,并将指示符(* / => @ |之一)附加到条目。我从托姆的答案中抄了下来
  5. grep -v /是用于搜索纯文本的命令,该-v /参数将保留所有不包含斜杠的字符串。
  6. wc -l 将打印行计数。

我知道这个问题已经3岁了,我无法忍受添加其他答案的冲动。


2

如果已tree在系统上安装,则可以使用以下命令:

tree -L 1 /path/to/your/directory | tail -n 1

它显示了该目录中文件和目录的数量。

-L n 显示搜索的深度。

您可以安装tree使用sudo apt-get install tree


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.