是否有任何 Linux 应用程序可以查找包含最多文件的文件夹?
猴面包树按文件夹的总大小对其进行排序,我正在寻找一个按文件夹中的文件总数列出文件夹的工具。
我之所以要查看,是因为复制数以万计的小文件非常慢(比复制几个相同大小的大文件慢得多),所以我想存档或删除那些文件数量较多的文件夹,因为这会减慢复制速度(现在它不会加快速度,但当我将来需要再次移动/复制时,速度会更快)。
答案1
答案2
从Shell:按文件数排序列出目录(请参阅文章了解解释):
单行代码(用于主目录):
find ~ -type d -exec sh -c "fc=\$(find '{}' -type f | wc -l); echo -e \"\$fc\t{}\"" \; | sort -nr
脚本:
countFiles () {
# call the recursive function, throw away stdout and send stderr to stdout
# then sort numerically
countFiles_rec "$1" 2>&1 >/dev/null | sort -nr
}
countFiles_rec () {
local -i nfiles
dir="$1"
# count the number of files in this directory only
nfiles=$(find "$dir" -mindepth 1 -maxdepth 1 -type f -print | wc -l)
# loop over the subdirectories of this directory
while IFS= read -r subdir; do
# invoke the recursive function for each one
# save the output in the positional parameters
set -- $(countFiles_rec "$subdir")
# accumulate the number of files found under the subdirectory
(( nfiles += $1 ))
done < <(find "$dir" -mindepth 1 -maxdepth 1 -type d -print)
# print the number of files here, to both stdout and stderr
printf "%d %s\n" $nfiles "$dir" | tee /dev/stderr
}
countFiles Home
答案3
我确信有办法通过脚本做到这一点,所以我去弄清楚了。
如果你创建了一个像这样的 bash 脚本(假设我们将其命名为‘countfiles’):
#!/bin/bash
find . -type d | while read DIR; do
ls -A $DIR | echo $DIR $(wc -w);done
然后运行它并像这样管道输出:
./countfiles | sort -n -k 2,2 > output
然后,您的输出文件将列出所有子目录,并列出其后的文件数(最后的文件数最多)。
例如,在我的 /usr 文件夹上运行上述脚本时,当我执行“tail output”时会显示此信息
./lib/gconv 249
./share/doc 273
./share/i18n/locales 289
./share/mime/application 325
./share/man/man8 328
./share/perl/5.10.1/unicore/lib/gc_sc 393
./lib/python2.6 424
./share/vim/vim72/syntax 529
./bin 533
./share/man/man1 711
可能有更好的方法来实现它;我不太擅长编写 bash 脚本 :(
答案4
尝试以下两种方法 -
1)有关树的详细输出 -
for i in $(ls -d */); do tree $i ; done > results.txt
输出 -
c++/
|-- 4.4
| |-- algorithm
| |-- array
| |-- backward
| | |-- auto_ptr.h
| | |-- backward_warning.h
| | |-- binders.h
| | |-- hash_fun.h
| | |-- hash_map
| | |-- hash_set
| | |-- hashtable.h
| | `-- strstream
| |-- bits
| | |-- algorithmfwd.h
...
38 directories, 662 files
2)关于树的使用总结——
for i in $(ls -d */); do tree $i | grep -v \\-\\-\ ; done
输出 -
arpa/
0 directories, 6 files
asm/
0 directories, 56 files
asm-generic/
0 directories, 34 files
bits/
0 directories, 103 files
c++/
38 directories, 662 files