我有一个很大的目录(非常大),在ls无法正常工作的地方,我也尝试过for进行迭代,但是没有运气。
此目录在gluster卷中...知道吗?
更多信息:
致谢
答案 0 :(得分:2)
您几乎可以肯定可以使用系统调用(在syscalls(2)中列出)和相关功能,例如opendir(3),readdir(3)(它们内部使用您不想直接使用的getdents(2)),closedir
,stat(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)提供特定的参数(例如{{1}的dir_index
)。
请记住,在调用execve(2)之前,外壳程序是由外壳程序完成的,这样做确实有局限性(通常,程序参数最多为数十万个字节,因此, expanded <不会超过几千个字节。 / em>程序的参数,否则ext4
失败,并出现execve
)。