按上次编辑日期列出文件


104

我有一个目录: /home/user/

如何列出此目录中的每个文件(包括子目录中的文件),并按上次修改日期排序?

Answers:


172

您可以使用:

ls -Rt

其中-R表示递归(包括子目录),-t表示“按最后修改日期排序”。


要查看按修改日期排序的文件列表,请使用:

ls -l -Rt

也可以创建别名来实现此目的:

alias lt='ls -lht'
lt

其中-h给出了更具可读性的输出。


16
谢谢,太好了。我也在那里添加了-l,因此我实际上可以看到日期,以便以后再搜索的人都可以看到-$ ls -lRt
Marty

4
如果您在提示符下执行此操作,并且想要查看最近修改的文件,请考虑ls -lrt[RhA]。在-r反转排列顺序,在列表的底部留下最近编辑过的东西......
dmckee ---前主持人小猫

这增加了-ila给您几乎所有您需要的信息。$ ls -ilaRt
Falkenfighter 2013年

我已经扩展了这个答案,因为使用ll -Rt是对我而言的完美解决方案,因为我需要按最新修改的日期查看文件。这可能对其他人有帮助。
小家鼠

@MusTheDataGuy ll是不存在的也不是命令。它在bash shell中主要是别名,但在most / some /?中未定义。linux发行版。有人alias ll='ls -l'在/etc/bash.bashrc或/etc/.bashrc中将其定义为。因此,它可能不起作用,并且可能在OPs系统上不存在。ls -l -Rt至少使用lsposix定义的标准命令。或指定您的意思alias ll='ls -l'; ll -Rt
KamilCuk

73

如果您想要一个主列表,其中所有文件修改日期排序,显示它们所在的目录,但不按目录分组,则可以使用以下方法:

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个根目录3892 2009年11月11日11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r--r-- 1个根目录22946 2009年8月13日11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r--r-- 1个根目录728 08/17/2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r--r-- 1个root 873 2009年8月18日10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r--r-- 1个root根2552 08/19/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r--r-- 1个根目录9546 2009年8月19日02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r--r-- 1个root根2201 2009年8月19日02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r--r-- 1个根目录926 08/19/2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r--r-- 1个根目录18052 2009年8月19日04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r--r-- 1个根目录1845 08/19/2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

对于使用Mac OS X的用户,选项-printf 在BSD find上不可用(您将得到此错误:)find: -printf: unknown primary or operator。幸运的是,您可以通过Homebrew安装GNU find (FinkMacports也应该有一个选项):

brew install findutils

安装后,您可以使用GNU查找gfind。因此,您需要做的就是将上面的行更改为:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

3
好一个。使用ls -R的整个目录分组很烦人。
El Yobo

1
很棒的代码,花了大约脚本。5秒即可排序并在许多不同的文件夹中打印出13000张照片(通过速度较慢的计算机上的Cygwin)。
Magnus 2012年

哦,这真棒。对于像我这样不熟悉find作者的人,这些参数-printf是可以在man findprintf在该页面中搜索的第五个实例)中找到的格式指令。
Owen Blacker

4
对于任何想在MacOS上使用它但又不想麻烦安装findutils的人:find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' '仅使用内置实用程序
就能

sort -r反转排序,并在顶部显示最近修改的文件。
maryisdead

0

MAC OSX 2019

如果您不关心创建时间,但希望对列表进行排序,请使用此命令

==> ls -t

如果要订购并查看日期和用户信息,请使用此命令

===> ls -lt


0

对于zsh用户,您还可以使用glob限定词(也记录在上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]))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.