我想要一个 BASH 命令来列出目录的每个子目录中的文件数量。
例如在目录中/tmp
有dir1
,,dir2
......我想看看:
`dir1` : x files
`dir2` : x files ...
答案1
假设您只想要文件的递归计数,而不是目录和其他类型,那么类似这样的操作应该有效:
find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
printf "%-25.25s : " "$dir"
find "$dir" -type f | wc -l
done
答案2
这个任务让我非常着迷,所以我想自己想出一个解决方案。它甚至不需要一个while循环,可能执行速度更快。毋庸置疑,Thor 的努力对我理解细节有很大帮助。
以下是我的:
find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "{} : $(find "{}" -type f | wc -l)" file\(s\)' \;
它看起来很朴素是有原因的,因为它的功能比看上去要强大得多。:-)
但是,如果您打算将其包含到您的.bash_aliases
文件中,它必须看起来像这样:
alias somealias='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '\''echo "{} : $(find "{}" -type f | wc -l)" file\(s\)'\'' \;'
注意嵌套的处理非常棘手单身的引文。不,这是不是可以使用双引号来引用该sh -c
参数。
答案3
find . -type f | cut -d"/" -f2 | uniq -c
列出当前文件夹中的文件夹和文件,并显示其下的文件数量。在我看来,它快捷又实用。(文件数量显示为 1)。
答案4
find . -mindepth 1 -type d -print0 | xargs -0 -I{} sh -c 'printf "%4d : %s\n" "$(find {} -type f | wc -l)" "{}"'
我经常需要计算子目录中的文件数量并使用此命令。我希望首先显示计数。