输出一个数
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[@]}"
你好,我有一个任务是计算目录中的符号链接(不是常规文件或目录等)的数量 /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[@]}"