在Linux中递归列出带有绝对路径的文件

11

这个问题与如何在Linux中列出带有绝对路径的文件非常相似。

我想要获取带有绝对路径和修改日期的文件或文件夹的名称。

这个命令几乎可以做到:

ls -lR /foo/bar | awk '{print $6,$7,$8,$9}'

但它没有显示绝对路径。

谢谢 Stollan


1
永远不要解析 ls 的输出。 - Philipp
2
关注解析ls输出的陷阱。请参考以下链接:https://dev59.com/cnNA5IYBdhLWcg3wfeAm 和 http://mywiki.wooledge.org/ParsingLs - David J. Liszewski
3个回答

13

请查看find命令及其printf选项。

find /foo/bar -printf "%p %A@"

查看 find 的手册以获取更多信息。


2
找到 /directory 目录下名为 "hello" 的文件,并打印出来,同时执行 date -r {} +%Y/%D:%H:%M 命令。另外还有一种方法,不过我不会给出答案,因为你的已经很好了。 - Anders
1
你可能需要一个 \n%A 是访问时间 - OP 要求修改时间,即 %T@ 给出了自纪元以来的秒数。如果你想要一个更易读的日期/时间,请使用:%T+%TY-%Tm-%Td %TX 或类似的格式。我会把日期放在前面,以便更容易进行固定宽度解析。所以,最终命令是:find /foo/bar -printf "%TY-%Tm-%Td %TX\t%p\n" - Dennis Williamson

-1

我喜欢使用:

ls -d -1 $PWD/**

没错。所以只有在您不想将目录中的文件包含在当前目录中时才使用这个选项。 - Dan Mantyla
这正是我寻找的答案...好吧,在我的情况下是 ls -lahrt /logdir1/** /logdir2/** - 显示隐藏[a]、人性化大小[h]、底部显示修改时间[rt-反向时间]。 - Tom St

-1

在阅读了一些部分解决方案(无递归,部分日期格式,无管道...)之后,我的建议是从目标文件夹开始:

find . -type f -exec ls -lAoUtTh {} \; | awk '{print $9"\t"$5"\/"$6"\/"$8"\t"$7"\t"$4}' | grep -E -i '.*\.fcp\b|.*\.omf\b'

感谢贡献者,程序运行良好,但基本上是我在慢慢地进行。

Gilles

OsX Darwin 10.8 bash


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接