输出一个数

Output in one number

你好,我有一个任务是计算目录中的符号链接(不是常规文件或目录等)的数量 /bin 以 b 作为他们名字的第一个字母。

>  find /bin -name "b*" -type l  -printf l  > list.txt

但它输出

1111

我应该怎么做才能将输出更改为这四个 1 中的一个数字(我的意思是 4)?

-type l 将找到所有符号链接并为每个符号链接打印 1。然后用wc来统计字符

find /bin -name "b*" -type l -printf 1|wc -c > list.txt

要正确计算带有换行符的符号链接:

find /bin -name "b*" -type l -printf "l" | wc -c >list.txt

您也可以使用以下基于 awk 的实现

controlplane ~ ➜   find /bin -type l | awk -F'/' ' ~ /^f/ {count++}END{print count}'
5

controlplane ~ ➜   find /bin -type l | awk -F'/' ' ~ /^b/ {count++}END{print count}'
2

controlplane ~ ➜  

可以通过将 find 的输出存储在数组中并计算数组条目来计算 Bash 脚本中的链接数:

#!/usr/bin/env bash

# Singular|Plural format string
__links_count_format=('There is %d link\n' 'There are %d links\n')

# Capture the links found by the find command into the links array
mapfile -d '' links < <(find /bin -name "b*" -type l -print0)

# Get the links count
links_count="${#links[@]}"

# Print the number of entries/links captured in the array
# shellcheck disable=SC2059 # dynamic format string
printf "${__links_count_format[links_count>1]}" "$links_count"

# Print the links captured in the array
printf '%s\n' "${links[@]}"