Pau*_*lin 39
ls -U
Run Code Online (Sandbox Code Playgroud)
会做没有排序的ls.
Rya*_*arn 11
尝试使用:
find . -type f -maxdepth 1
Run Code Online (Sandbox Code Playgroud)
这将只列出目录中的文件,-type f
如果要列出文件和目录,请省略参数.
这个问题似乎很有趣,我正在经历多个已发布的答案.为了理解发布的答案的效率,我已经在200万个文件上执行了它们,并找到了如下结果.
$ time tar cvf /dev/null . &> /tmp/file-count
real 37m16.553s
user 0m11.525s
sys 0m41.291s
------------------------------------------------------
$ time echo ./* &> /tmp/file-count
real 0m50.808s
user 0m49.291s
sys 0m1.404s
------------------------------------------------------
$ time ls &> /tmp/file-count
real 0m42.167s
user 0m40.323s
sys 0m1.648s
------------------------------------------------------
$ time find . &> /tmp/file-count
real 0m2.738s
user 0m1.044s
sys 0m1.684s
------------------------------------------------------
$ time ls -U &> /tmp/file-count
real 0m2.494s
user 0m0.848s
sys 0m1.452s
------------------------------------------------------
$ time ls -f &> /tmp/file-count
real 0m2.313s
user 0m0.856s
sys 0m1.448s
------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
总结结果
ls -f
命令运行速度比ls -U
.禁用颜色可能会导致这种改进.find
命令运行第三,平均速度为2.738秒. ls
花了42.16秒.在我的系统中ls
是别名ls --color=auto
echo ./*
运行50.80秒.tar
基础的解决方案用了大约37 miuntes.当系统处于怠速状态时,所有测试都是单独进行的.
这里要注意的一件重要事情是,文件列表不会在终端中打印,而是被重定向到文件,文件计数稍后会通过wc
命令计算出来.如果输出在屏幕上打印,则命令运行得太慢.
任何想法为什么会这样?
我有一个包含400万个文件的目录,而我得到ls立即吐出文件而没有太多麻烦的唯一方法是
ls -1U
Run Code Online (Sandbox Code Playgroud)
小智 6
使用
ls -1 -f
Run Code Online (Sandbox Code Playgroud)
速度大约快10倍,而且操作简单(我测试了100万个文件,但最初的问题有6 800000000个文件)
但就我而言,我需要检查某个特定目录是否包含超过10 000个文件。如果有超过10 000个文件,那么我不再对有多少文件感兴趣。我只是退出程序,以便它运行更快,并且不会尝试一一阅读其余的程序。如果少于一万,我将打印准确的金额。如果您为参数指定的值大于文件数量,则我的程序的速度与ls -1 -f非常相似。
您可以通过键入以下命令在当前目录中使用我的程序find_if_more.pl:
find_if_more.pl 999999999
Run Code Online (Sandbox Code Playgroud)
如果您只是想知道文件数是否大于n,脚本将比ls -1 -f处理大量文件的速度更快。
#!/usr/bin/perl
use warnings;
my ($maxcount) = @ARGV;
my $dir = '.';
$filecount = 0;
if (not defined $maxcount) {
die "Need maxcount\n";
}
opendir(DIR, $dir) or die $!;
while (my $file = readdir(DIR)) {
$filecount = $filecount + 1;
last if $filecount> $maxcount
}
print $filecount;
closedir(DIR);
exit 0;
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以重定向输出并在后台运行 ls 进程。
ls > myls.txt &
Run Code Online (Sandbox Code Playgroud)
这将允许您在业务运行时继续开展业务。它不会锁住你的外壳。
不确定运行 ls 和获取较少数据的选项是什么。你可以随时跑去man ls
检查。