嘿,我对如何递归地计算文件夹中不同数量的文件类型/扩展名感到震惊。我还需要将它们打印到 .txt 文件中。
例如,我有 10 个 txt 的 20 个 .docx 文件混合在多个文件夹中。
帮我 !
find ./ -type f |awk -F . '{print $NF}' | sort | awk '{count[$1]++}END{for(j in count) print j,"("count[j]" occurences)"}'
获取所有带有 的文件名find
,然后用于awk
获取扩展名,然后awk
再次用于计算出现次数
仅使用 bash:此代码所需的版本 4
#!/bin/bash
shopt -s globstar nullglob
declare -A exts
for f in * **/*; do
[[ -f $f ]] || continue # only count files
filename=${f##*/} # remove directories from pathname
ext=${filename##*.}
[[ $filename == $ext ]] && ext="no_extension"
: ${exts[$ext]=0} # initialize array element if unset
(( exts[$ext]++ ))
done
for ext in "${!exts[@]}"; do
echo "$ext ${exts[$ext]}"
done | sort -k2nr | column -t
到目前为止,这似乎还没有解决,所以这是我计算文件并订购它们的距离:
find . -type f | sed -n 's/..*\.//p' | sort -f | uniq -ic