如何显示文件夹中的项目数-Bash

时间:2019-06-16 12:34:29

标签: bash

当我执行ls -l -h命令时,得到的输出如下图所示。 enter image description here

如何将文件夹中的项目数包括在输出中?

更新 当前输出如下:

total 41M
-rw-r--r-- 1 root     root      41M Dec 20 09:56 completed_projects.bson
-rw-r--r-- 1 root     root      213 Dec 20 09:57 completed_projects.metadata.json
drwxrwxr-x 2 adipster adipster 4.0K Jun 16 13:22 contents
-rw-rw-r-- 1 adipster adipster   13 Jun 16 13:20 file.py
drwxrwxr-x 4 adipster adipster 4.0K Jun 16 13:22 folder
drwxrwxr-x 2 adipster adipster 4.0K Jun 16 13:21 items

但是我想再有一个列来表示这样的文件夹中的项目数

total 41M
-rw-r--r-- 1 root     root      41M Dec 20 09:56 completed_projects.bson
-rw-r--r-- 1 root     root      213 Dec 20 09:57 completed_projects.metadata.json
drwxrwxr-x 2 adipster adipster 4.0K Jun 16 13:22 contents  235
-rw-rw-r-- 1 adipster adipster   13 Jun 16 13:20 file.py  
drwxrwxr-x 4 adipster adipster 4.0K Jun 16 13:22 folder  19
drwxrwxr-x 2 adipster adipster 4.0K Jun 16 13:21 items  5

其中最右端的数字表示文件夹中的项目数

3 个答案:

答案 0 :(得分:2)

sed可以选择执行/e的构造替换。 我们只计算子目录,看第一个字符

ls -l | sed -r 's/d(.*) ([^ ]*)/printf "d%s %-20s%s\n" "\1" \2 $(ls \2| wc -l)/e'

编辑:名称中带有空格的目录的解决方案。

应避免解析ls。当您尝试在cmmand上方修复带有空格的目录名称时,可以尝试

# Don't do this
ls -l | sed -r 's/d(.{,48}) (.*)/printf "d%s %-20s%s\n" "\1" "\2" $(ls "\2"| wc -l)/e'

是时候编写脚本了。也许使用find或类似的

#/bin/bash
for i in *; do
   printf "%-70s %s\n" "$(/bin/ls -ld "$i")" "$(/bin/ls -d "$i"/* 2>/dev/null| wc -l)"
done

文件名包含换行符时,子目录中的wc将算错。

答案 1 :(得分:1)

您可以执行以下操作:

echo -n "Number of files in folder is: " && ls | wc -l && ls -l

ouptut应该是这样的:

umber of files in folder is: 3
Total 279K
-rwxr-xr-x 1 user users 19K Jun 16 00:17 a
-rwxr-xr-x 1 user users 5K Jun 16 00:17 b
-rwxr-xr-x 1 user users 255K Jun 16 00:17 c

您可以省略echo语句,就像注释-n没有新行标志一样。

答案 2 :(得分:1)

ls() { command ls "$@" | tee >(echo "$(wc -l) items"); }

它使用输出过程替换来在标准输入上运行小“ echo”脚本,同时还显示标准输入(由于tee)。这样,您不必运行ls两次。

通常的警告:当名称中包含换行符的文件时,输出将不正确。