如何将文件夹中的项目数包括在输出中?
更新 当前输出如下:
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
其中最右端的数字表示文件夹中的项目数
答案 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
两次。
通常的警告:当名称中包含换行符的文件时,输出将不正确。