如何使用`find`并按mtime对结果进行排序?

dan*_*dan 94 ls find

我想使用find但与ls -ltr. 这是否可以通过标志或管道的任何组合来实现?

ang*_*gus 139

使用find's-printf命令输出时间(以可排序的方式)和文件,然后排序。如果您使用 GNU 查找,

find . your-options -printf "%T+ %p\n" | sort
Run Code Online (Sandbox Code Playgroud)

为方便起见,这里是对-printf "%T+ %p\n"from的解释man find

  • %Tk指定格式的文件的最后修改时间,k与 for 相同%A
    • 其中,k在这种情况下被设置为+
    • + 日期和时间,以 分隔+,例如`2004-04-28+22:22:05.0'。这是一个 GNU 扩展。时间以当前时区给出(可能会受到设置 TZ 环境变量的影响)。秒字段包括小数部分。
  • %p 文件名。

  • `ls -t` 从新到旧排序,`sort` 从旧到新排序。所以 `ls -t` 的逆序是 `sort` 的正常顺序。 (8认同)
  • `sort -r` 用于逆序。 (7认同)
  • 对于 OS X 和非 GNU,请使用 [this answer](http://superuser.com/a/546900/365890)。 (6认同)
  • 要使其与 OSX 一起使用,请从自制软件安装 findutils,然后使用 gfind not find。/sf/ask/52697291/ (6认同)

Ben*_*man 5

如果这只是一个深度为 n(假设深度为 2)的文件夹层次结构,我发现这个很有用:

ls -laht --full-time */*
Run Code Online (Sandbox Code Playgroud)

  • @mwfearnley 这正是我上面所说的“这只是深度 n”的意思:)如果你想要深度 3,你可以做 `*/*/*` (2认同)
  • 所以基本上,只有当所有文件的深度正好是 n 层并且该级别没有子文件夹时,您的建议才按预期工作。你应该解释一下。后者可能可以通过“ls”的另一个标志来克服,并且您也许可以使用“ls ... * */* */*/* ...”覆盖直到“n”的所有级别 (2认同)