我想列出所有文件(使用绝对路径)并且仅按修改日期顺序显示给定目录中的文件(不是子目录)。我知道 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
告诉递归级别。
答案3
假设路径没有换行符:
ls -ltd "$PWD/relative_path/"* | grep -v '^d'
如果你想列出当前目录中的文件,只需删除/relative_path
.显然,您也可以立即给出绝对路径:
ls -ltd "/var/reports/"* | grep -v '^d'
要列出点文件,在 Bash 和 Ksh 中,您可以简单地替换*
为{*,.*}
.在 Zsh 中,您需要setopt cshnullglob
首先执行此操作,否则如果目录中不存在点文件或非点文件,命令将失败。