我有一个目录:/home/user/
如何列出此目录中的每个文件(包括子目录中的文件)并按照上次修改日期对其进行排序?
答案 0 :(得分:162)
您可以使用:
$ ls -Rt
其中-R
表示递归(包含子目录),-t
表示“按上次修改日期排序”。
要查看按修改日期排序的文件列表,请使用:
$ ls -l -Rt
也可以创建别名来实现此目的:
alias ll='ls -l'; ll -Rt
答案 1 :(得分:71)
如果您想要一个主列表,其中所有文件都按修改日期排序,显示他们所在的目录,但未按目录分组 ,你可以用这个:
find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
结果看起来很像ls -l
:
-rw-r--r-- 1 root root 3892 08/11/2009 11:03:36 /usr/share/man/man1/xmllint.1.gz -rw-r--r-- 1 root root 22946 08/13/2009 11:59:20 /usr/share/man/man1/curl.1.gz -rw-r--r-- 1 root root 728 08/17/2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz -rw-r--r-- 1 root root 873 08/18/2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz -rw-r--r-- 1 root root 2552 08/19/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz -rw-r--r-- 1 root root 9546 08/19/2009 02:02:00 /usr/share/man/man1/pidgin.1.gz -rw-r--r-- 1 root root 2201 08/19/2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz -rw-r--r-- 1 root root 926 08/19/2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz -rw-r--r-- 1 root root 18052 08/19/2009 04:11:47 /usr/share/man/man1/mono.1.gz -rw-r--r-- 1 root root 1845 08/19/2009 04:11:47 /usr/share/man/man5/mono-config.5.gz
对于使用Mac OS X的用户,在BSD查找中找不到选项 -printf (您将收到此错误:find: -printf: unknown primary or operator
)。幸运的是,您可以通过 Homebrew 安装GNU find(还应该选择 Fink 和 Macports ):
brew install findutils
安装完成后,GNU查找应该可以gfind
使用。因此,您需要做的就是将上面的行更改为:
gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
答案 2 :(得分:0)
MAC OSX 2019
如果您不关心创建时间,但是希望对列表进行排序,请使用此命令
==> ls -t
如果要订购并查看日期和用户信息,请使用此命令
===> ls -lt
答案 3 :(得分:0)
对于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]))