首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >find(1)列出文件的顺序是什么?

find(1)列出文件的顺序是什么?
EN

Stack Overflow用户
提问于 2018-06-02 14:28:03
回答 1查看 211关注 0票数 1

find . -type f上,如果目录中只有文件创建而没有-deletions,我希望extfs会按照文件创建的时间顺序(或mtime)列出文件,如果没有,至少会按相反的时间顺序列出文件……这取决于如何遍历目录的内容。

但这不是我看到的行为。

下面的代码创建了一组新的目录和文件:

代码语言:javascript
复制
#!/bin/bash -u

for i in a/ a/{1,2,3,4,5} b/ b/{1,2,3,4,5}; do
    if echo "$i" | egrep -q "/$"; then
        echo "Creating dir $i"
        mkdir -p "$i"
    else
        echo "Creating file $i"
        touch "$i"
    fi
    sleep 0.500
done

上述代码片段的输出:

代码语言:javascript
复制
Creating dir a/
Creating file a/1
Creating file a/2
Creating file a/3
Creating file a/4
Creating file a/5
Creating dir b/
Creating file b/1
Creating file b/2
Creating file b/3
Creating file b/4
Creating file b/5

然而,find以某种随机的顺序列出文件。例如,a/2不遵循a/1b/2也不遵循b/1

代码语言:javascript
复制
$ find . -type f
./a/1
./a/3
./a/4
./a/2   <----
./a/5
./b/1
./b/3
./b/4
./b/2   <----
./b/5

你知道为什么会发生这种情况吗?

我的主要问题是:,,我有一个非常大的卷,存储了上百个,上千个文件。我需要按照创建/修改(mtime)的顺序遍历这些文件和目录,并通过管道将每个文件传递给另一个进程进行进一步处理。但我不一定要先创建这一大组文件的临时列表,然后根据mtime对其进行排序,然后再通过管道将其传送到我的进程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 09:09:19

find按照底层文件系统实现报告对象的顺序列出对象。您可以通过向ls传递-f选项来告诉它显示这个“原始”订单。

这个顺序可以是任何东西--按字母顺序、按mtime、按atime、按名称长度、按权限或其他完全不同的顺序。排序甚至可以根据列表的不同而有所不同。

文件系统通常以反映文件系统为文件分配目录槽的策略的顺序进行报告。如果这是某种基于文件名的基于散列的策略,那么这种顺序可能看起来毫无意义。这就是广泛使用的Linux和BSD文件系统实现所发生的情况。由于您提到了extfs,这可能就是导致您看到的排序的原因。

因此,如果您需要以特定的方式对find的输出进行排序,那么您必须自己创建该顺序。也许是基于这样的东西:

代码语言:javascript
复制
  find . -type f -exec ls -ltr --time-style=+%s {} \; | sort -n -k6
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50654159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档