13 filesystem ls
在按创建的时间戳(最旧的第一个)排序的目录中列出 100 个第一个文件的最佳方法是什么。该目录非常大(大约 100000 个文件)。
ls 通过管道传输到头部需要很长时间才能完成。
编辑:
Mik*_*kel 14
你说“ LS管道输送到头部需要一个可怕的长时间才能完成”。
造成这种情况的原因不是ls,而是目录中的文件数。如果单个目录中有 100,000 个文件,那么任何解决此问题的方法都必须先获取所有 100,000 个文件的信息,然后才能考虑对它们进行排序或打印任何输出。
如果时间太长,真正的解决方案是将文件拆分到多个目录中。
如果您不能将文件分布在多个目录中,有什么办法可以缩小要考虑的文件数量?例如,如果文件名包含日期,也许您可以包含通配符,这样系统就不必对 100,000 个文件进行排序。或者它们是按顺序编号的?(这可能有帮助,也可能无济于事,但值得一试。)
你尝试这样做多少次? 也许值得保存/缓存输出以供重用。
现在,一个问题。
您确定您的意思是“创建时间”而不是“更改时间”?大多数工具只能显示“更改时间”,而不能显示“创建时间”。
获得“创建时间”是一个很新的东西,它需要一个 ext4 文件系统,以及一些不容易安装的工具。
如果你想改变时间
更改时间(简称ctime)是指文件属性最后一次更改的时间。
ls -c 按 ctime 排序。
您希望输出按升序而不是降序排列,因此您也需要使用该-r选项反转输出。
所以你可以这样做:
ls -cr | head -n 100
Run Code Online (Sandbox Code Playgroud)
使用以下方法解决同一问题的较长时间stat:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
Run Code Online (Sandbox Code Playgroud)
但这比ls -cr我的系统运行得慢。
如果你想修改时间
修改时间(简称mtime)是指文件内容最后一次修改的时间。
ls -t 按时间排序。
更改ls -cr为ls -tr(最佳选择)或更改stat -c $'%Z\t%n'为stat -c $'%Y\t%n'.
如果您需要创建时间
(简称crtime)
这更难。
首先,确保目录位于使用ext4. 你可以用它tune2fs -l <device name>来检查这个。
然后,有一种stat名为的新格式%W,它可以在此处为您提供帮助。要获得它,您必须下载2010 年 10 月或之后发布的GNU Coreutils版本,将其解压缩、编译并安装。
然后,根据您的内核,这可能会起作用(还没有尝试过)。
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
Run Code Online (Sandbox Code Playgroud)
也可以看看:
如果你得到关于 "'$\t'
该'$\t'符号需要bash或zsh:它不会在工作dash或sh在Ubuntu。如果您确实需要使用这些外壳,则需要将 any 更改\t为Ctrl+ V,Tab并删除$开头引号之前的前导。
| 归档时间: |
|
| 查看次数: |
30247 次 |
| 最近记录: |