![仅在特定文件夹中保存文件数量](https://linux22.com/image/5184/%E4%BB%85%E5%9C%A8%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E4%BF%9D%E5%AD%98%E6%96%87%E4%BB%B6%E6%95%B0%E9%87%8F.png)
我使用此脚本来保存主文件夹中的文件数量,但它也计算该主文件夹内的子文件夹。
nfiles=$(ls -1 /home/userA/mainfolder | wc -l)
有什么建议我可以将其修改为仅包含文件而不包含文件夹吗?
答案1
不要用于find
此。
除了需要非可移植的 GNU 扩展才能使其工作之外,它还需要stat()
它搜索的每个文件。ls
另一方面,可以简单地-1
每行列出当前目录的目录项,同时-q
用 ? 引用所有不可打印的内容。问号(包括\n
elines)/
,并为每个目录列表附加。
这样,对于-c
当前目录中的简单数量的非点文件,您可以执行以下操作:
ls -1pq | grep -c -v /
整个过程不仅可能比find
实际情况更快,而且也是 POSIXly 完成的。
答案2
而不是解析ls
, 您可以使用find
:
find . -maxdepth 1 -type f ! -name ".*" | wc -l
这将查找-type f
当前目录 ( .
) 中的所有文件 (),除了以 . ( ! -name ".*"
) 并将结果传递给wc
计算行数。
要将其用作脚本中的变量:
nfiles=$(find . -maxdepth 1 -type f ! -name ".*" | wc -l)