【发布时间】:2010-11-27 03:46:32
【问题描述】:
我有一个目录:/home/user/
如何列出此目录中的每个文件(包括子目录中的文件)并按上次修改日期对它们进行排序?
【问题讨论】:
我有一个目录:/home/user/
如何列出此目录中的每个文件(包括子目录中的文件)并按上次修改日期对它们进行排序?
【问题讨论】:
你可以使用:
ls -Rt
其中-R 表示递归(包括子目录),-t 表示“按最后修改日期排序”。
要查看按修改日期排序的文件列表,请使用:
ls -l -Rt
也可以创建一个别名来实现这一点:
alias lt='ls -lht'
lt
-h 提供更易读的输出。
【讨论】:
ls -lrt[RhA]。 -r 反转排序顺序,将最近编辑的内容留在列表底部...
-ila 为您提供了几乎所有您需要的信息。 $ ls -ilaRt
ll -Rt 对我来说是完美的解决方案,因为我需要按最近修改的日期查看文件。这可能对其他人有帮助。
ll 不存在,也不是命令。它主要是 bash shell 中的别名,但未在 most/some/? 中定义linux发行版。有些人在 /etc/bash.bashrc 或 /etc/.bashrc 中将其定义为 alias ll='ls -l'。因此它可能不起作用,并且它可能不存在于 OPs 系统上。至少使用ls -l -Rt,因为ls 是posix 定义的标准命令。或指定您的意思是alias ll='ls -l'; ll -Rt。
如果您想要一个主列表,其中所有文件按修改日期排序,显示它们所在的目录,但不按目录分组 ,你可以使用这个:
find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
结果看起来很像ls -l:
对于那些使用 Mac OS X 的人,选项 -printf 在 BSD 查找中不可用(您将收到此错误:find: -printf: unknown primary or operator)。幸运的是,您可以通过 Homebrew 安装 GNU(应该还有 Fink 和 Macports 的选项):
brew install findutils
安装后,GNU find 应该可以作为gfind 提供给您。因此,您需要做的就是将上面的行更改为:
gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
【讨论】:
find 的人(比如我),-printf 的那些参数是可以在man find 中找到的格式指令(在该页面中搜索printf 的第五个实例)。
find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' ' 将在 MacOS 上仅使用内置实用程序为您提供大致相同的输出
sort -r 反转排序并将最近修改的文件放在最前面。
MAC OSX 2019
如果你不关心它的创建时间,但你希望你的列表排序,那么使用这个命令
==> ls -t
如果您想订购并查看日期和用户信息,请使用此命令
===> ls -lt
【讨论】:
对于zsh 用户,您也可以使用glob qualifiers(也记录在man zshexpn):
echo *(om)
其中o 代表排序顺序,向上,m 代表最后修改时间。
这在用于 for 循环或其他命令时很有用:
for file in *(^om); do
[ -e "$file" ] || continue
# do something with file orderer from least recently modified to last modified
done
或与另一个 glob 限定符链接:
last_modified_file=(*(om[1]))
【讨论】: