【问题标题】:List files by last edited date按上次编辑日期列出文件
【发布时间】:2010-11-27 03:46:32
【问题描述】:

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

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

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    你可以使用:

    ls -Rt
    

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


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

    ls -l -Rt
    

    也可以创建一个别名来实现这一点:

    alias lt='ls -lht'
    lt
    

    -h 提供更易读的输出。

    【讨论】:

    • 谢谢,太好了。我也在其中添加了一个 -l,这样我实际上可以看到日期,所以对于以后搜索它的任何人来说,它是 - $ ls -lRt
    • 如果您在提示符下执行此操作并希望查看最近修改的文件,请考虑ls -lrt[RhA]-r 反转排序顺序,将最近编辑的内容留在列表底部...
    • 这添加到-ila 为您提供了几乎所有您需要的信息。 $ ls -ilaRt
    • 我已经扩展了这个答案,因为使用 ll -Rt 对我来说是完美的解决方案,因为我需要按最近修改的日期查看文件。这可能对其他人有帮助。
    • @MusTheDataGuy 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
    【解决方案2】:

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

    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 08/11/2009 11:03:36 /usr/share/man/man1/xmllint.1.gz -rw-r--r-- 1 根 22946 08/13/2009 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 根 873 08/18/2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz -rw-r--r-- 1 根 2552 08/19/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz -rw-r--r-- 1 根 9546 08/19/2009 02:02:00 /usr/share/man/man1/pidgin.1.gz -rw-r--r-- 1 根 2201 08/19/2009 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 08/19/2009 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: -printf: unknown primary or operator)。幸运的是,您可以通过 Homebrew 安装 GNU(应该还有 FinkMacports 的选项):

    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 ' '
    

    【讨论】:

    • 不错的一个。使用 ls -R 对整个目录进行分组很烦人。
    • 很棒的代码,它花了大约脚本。 5 秒钟就可以整理和打印出许多不同文件夹中的 13k 张照片(通过 Cygwin 在一台速度非常慢的计算机上)。
    • 哦,现在太棒了。对于不像作者那样熟悉find 的人(比如我),-printf 的那些参数是可以在man find 中找到的格式指令(在该页面中搜索printf 的第五个实例)。
    • 对于任何想在 MacOS 上使用它但不想费心安装 findutils 的人:find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' ' 将在 MacOS 上仅使用内置实用程序为您提供大致相同的输出
    • sort -r 反转排序并将最近修改的文件放在最前面。
    【解决方案3】:

    MAC OSX 2019

    如果你不关心它的创建时间,但你希望你的列表排序,那么使用这个命令

    ==> ls -t

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

    ===> ls -lt

    【讨论】:

      【解决方案4】:

      对于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]))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多