gpt4 book ai didi

linux - 我无法列出大目录

转载 作者:太空宇宙 更新时间:2023-11-04 04:43:20 25 4
gpt4 key购买 nike

我有一个很大的目录(非常大),其中 ls 不起作用,我也尝试使用 for 迭代它,但没有运气。

该目录位于 gluster 卷中...知道吗?

更多信息:

  • Gluster vol 通过简单的选项安装在 fstab 中。
  • 我已经尝试过 * 中的 f ;用 $f 做一些事情;完成
  • 现在我正在尝试 rsync -a --deleteempty-dir/my-dir/

问候

最佳答案

您几乎肯定可以使用系统调用(在 syscalls(2) 中列出)和相关函数,例如opendir(3)readdir(3) (它们在内部使用您不想直接使用的 getdents(2) )、 linedirstat(2)nftw(3) ;当然,您需要编写一个特定的程序(可能用 C 语言,或者至少用 Python 语言)。

下次,即使对于巨大(PB大小)的文件系统,也要注意避免每个目录超过几千个条目(因此请像 00/00/0001.jpeg .... 01/23/4567.jpeg 等组织文件,而不是 00000001.jpeg ... 01234567.jpeg 和等等在一个目录中)。如果您保留小型目录(即使在 PB 大小的文件系统中),您将使您的 shell 更快乐、更可用(甚至可能是您的内核)。

但是,最近的文件系统(例如 EXT4 或 BTRFS)能够在目录中包含数百万个条目。但 shell(和 globbing ,请参阅 glob(7) ...)对此不满意。我的猜测是 /bin/ls 不带参数(或者至少 /bin/ls -f 以获得未排序列表)应该可以工作(请参阅 ls(1) )。

某些文件系统,即使每个目录能够容纳数百万个条目,也可能需要线性时间来访问它们(请参阅 path_resolution(7)ext4(5) 等...),否则您可能需要向 mount(8) 提供特定参数(例如 ext4dir_index)。

请记住,通配符是由 shell 在调用 execve(2) 之前完成的,这确实有限制(通常,程序参数最多几十万字节,因此程序的扩展参数不超过几千个,否则execve会因E2BIG而失败)。

关于linux - 我无法列出大目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53806058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com