在bash变量中使用find计算找到的路径数



我想递归地搜索一些文件,并计算我发现的出现次数。要找到我做的文件:

file=$(find . -iname "*.xml")

现在,我想将出现的次数存储在另一个变量中。我只是不知道怎么做。我试过了:

n=$(echo $file | wc -l)

但我认为这不是正确的方式。。。

非常感谢您的帮助:(

您的命令中有一个拼写错误:}不正确。

去掉它后,你的尝试非常接近,但你必须引用变量展开来保留换行符:

files=$(find . -iname '*.xml')
n=$(echo "$files" | wc -l)
echo "$n"

不过,对于具有外来名称的文件,这仍然可能会中断,例如在文件名中包含换行符。为了使它对所有可能的文件名都具有健壮性,您可以这样做(需要GNUfind(:

files=$(find . -iname '*.xml' -printf '.')
echo "${#files}"

这将为找到的每个文件打印一个.,然后对这些周期进行计数。

或者,如果您没有GNUfind,您可以对文件名使用空字节分隔,并将其读取到数组中:

readarray -d '' files < <(find . -iname '*.xml' -print0)
echo "${#files[@]}"

或者对于readarray无法指定要使用的分隔符的旧版本Bash(任何早于4.4的Bash(:

while IFS= read -r -d '' fname; do
files+=("$fname")
done < <(find . -iname '*.xml' -print0)
echo "${#files[@]}"
#!/bin/bash
# make an array
files=($(find . -name *.xml -print))
# number of array elements
fcnt=${#files[@]}
echo files: "${files[@]}"
echo
echo fcnt: $fcnt

最新更新