我想按照修改日期的顺序列出给定目录(给定绝对路径)中的所有文件(带有绝对路径)

我想按照修改日期的顺序列出给定目录(给定绝对路径)中的所有文件(带有绝对路径)

我想列出所有文件(使用绝对路径)并且仅按修改日期顺序显示给定目录中的文件(不是子目录)。我知道 ls /path_to_dir -t 根据修改日期列出文件,但它没有给出完整路径更多说明:我的工作目录是 /home/emirates/Code。
从工作目录中,我想列出:

  • 仅具有完整绝对路径的文件
  • 按照文件修改的顺序
  • 从目录 /var/reports
  • 请注意,我的工作目录可能会发生变化,即在生产环境中它可能位于任何地方

答案1

zsh

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom.) # regular files only

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom^/) # any type of file except
                                             # directory (so includes
                                             # symlinks, fifos, devices,
                                             # sockets... in addition to
                                             # the regular files above)

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom-^/) # any type except directory 
                                              # but this time the type is
                                              # determined after symlink
                                              # resolution so would also
                                              # exclude symlinks to
                                              # directories.

print -rC1 -- ${PWD%/}/path_to_dir/*(ND-om^/) # same but also use the
                                              # modification time of the target
                                              # of symlinks when sorting

print -rC1 -- path_to_dir/*(ND-om^/:P) # same but print the real path for each
                                       # file. That is, make sure it's absolute
                                       # and none of the path components
                                       # are symlinks.

${PWD%/}$PWD是处理是 的情况,/所以我们得到/path_to_dir/files而不是//path_to_dir/files

${PWD%/}/只是前置相对的路径(例如path_to_dir)使其成为绝对路径,而不是已经是绝对路径(例如/absolute/path_to_dir)。

所以对于你来说/var/reports,使用print -rC1 -- /var/reports/*(...)

答案2

您可以使用find

请注意,它假定 GNU 实现find(并且cut否则sort 不能可移植地用于处理非文本)并且文件路径不包含换行符。另请注意,它排除目录,但也排除所有其他非常规类型的文件,包括符号链接(无论它们是否指向常规文件)、fifo、设备、套接字

find "$PWD/relative_path" -maxdepth 1 -type f -printf "%T@\0%p\n"| sort -rn | cut -d '' -f2

将列出给定路径的文件,maxdepth告诉递归级别。


借自Unix/Linux 查找并按修改日期排序

答案3

假设路径没有换行符:

ls -ltd "$PWD/relative_path/"* | grep -v '^d'

如果你想列出当前目录中的文件,只需删除/relative_path.显然,您也可以立即给出绝对路径:

ls -ltd "/var/reports/"* | grep -v '^d'

要列出点文件,在 Bash 和 Ksh 中,您可以简单地替换*{*,.*}.在 Zsh 中,您需要setopt cshnullglob首先执行此操作,否则如果目录中不存在点文件或非点文件,命令将失败。

改编自https://stackoverflow.com/a/5580868

相关内容