当前位置:  开发笔记 > 编程语言 > 正文

快速命令

如何解决《快速命令》经验,为你挑选了5个好方法。

我必须得到一个包含大约200万个文件的目录列表,但是当我ls对它执行命令时,什么都没有回来.我等了3个小时.我试过了ls | tee directory.txt,但这似乎永远挂了.

我假设服务器正在进行大量的inode排序.有没有办法加快ls命令只是获取文件名的目录列表?我此时并不关心大小,日期,许可等.



1> Paul Tomblin..:
ls -U

会做没有排序的ls.


注意:在某些系统上,`ls -f`相当于`ls -aU`; 即,包括_all_文件(即使名称以'.'开头的文件)也不要排序.在_some_系统上,`-f`是***选项来抑制排序,`-U`做其他事情(或什么都不做).

2> Ryan Ahearn..:

尝试使用:

find . -type f -maxdepth 1

这将只列出目录中的文件,-type f如果要列出文件和目录,请省略参数.



3> Kannan Mohan..:

这个问题似乎很有趣,我正在经历多个已发布的答案.为了理解发布的答案的效率,我已经在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

------------------------------------------------------

总结结果

    ls -f命令运行速度比ls -U.禁用颜色可能会导致这种改进.

    find 命令运行第三,平均速度为2.738秒.

    跑步只ls花了42.16秒.在我的系统中ls是别名ls --color=auto

    使用shell扩展功能echo ./*运行50.80秒.

    tar基础的解决方案用了大约37 miuntes.

当系统处于怠速状态时,所有测试都是单独进行的.

这里要注意的一件重要事情是,文件列表不会在终端中打印,而是被重定向到文件,文件计数稍后会通过wc命令计算出来.如果输出在屏幕上打印,则命令运行得太慢.

任何想法为什么会这样?



4> stu..:

我有一个包含400万个文件的目录,而我得到ls立即吐出文件而没有太多麻烦的唯一方法是

ls -1U


拯救了我的一天!谢谢!

5> 小智..:

使用

ls -1 -f 

速度大约快10倍,而且操作简单(我测试了100万个文件,但最初的问题有6 800000000个文件)

但就我而言,我需要检查某个特定目录是否包含超过10 000个文件。如果有超过10 000个文件,那么我不再对有多少文件感兴趣。我只是退出程序,以便它运行更快,并且不会尝试一一阅读其余的程序。如果少于一万,我将打印准确的金额。如果您为参数指定的值大于文件数量,则我的程序的速度与ls -1 -f非常相似。

您可以通过键入以下命令在当前目录中使用我的程序find_if_more.pl:

find_if_more.pl 999999999

如果您只是想知道文件数是否大于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;

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有