![如何递归列出所有带有时间戳和完整路径的文件?](https://linux22.com/image/1260816/%E5%A6%82%E4%BD%95%E9%80%92%E5%BD%92%E5%88%97%E5%87%BA%E6%89%80%E6%9C%89%E5%B8%A6%E6%9C%89%E6%97%B6%E9%97%B4%E6%88%B3%E5%92%8C%E5%AE%8C%E6%95%B4%E8%B7%AF%E5%BE%84%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我想递归列出给定目录中的所有文件,以及它们的完整路径和时间戳。如下所示:
10:30 Dec 10 2010 /tmp/mydir/myfile
我尝试过:
find . -type f -exec ls -la {} \;
但这并没有给我完整的路径。
答案1
如果你的 find 不支持 printf,还有另一种方法
find . -type f | xargs ls -al | awk -v pwd="$PWD" '{ print $(NF-2), $(NF-1) , pwd substr($(NF), 2)}'
笔记:这仅在文件名中没有空格时才有效。输出如下所示:
2010-09-29 22:08 /home/nifle/ac.txt
2010-10-04 16:02 /home/nifle/array.sh
2010-10-05 23:32 /home/nifle/b.txt
2010-12-15 16:49 /home/nifle/barcopy/subbar/ghut
2010-12-15 16:48 /home/nifle/bardir/subbar/ghut
2010-09-29 22:16 /home/nifle/foo.gz
2010-09-29 22:16 /home/nifle/foo1.gz
答案2
解决方案 1(ls)
在每个文件上运行ls
并过滤结果:
find "$PWD" -type f -exec ls -la {} \; | cut -d ' ' -f 6-
输出:
Jun 14 00:02 /tmp/superuser.com/questions/370070/bar
Jun 14 20:24 /tmp/superuser.com/questions/228529/file with multiple spaces
Jan 2 1972 /tmp/superuser.com/questions/228529/old_file
解决方案 2(-printf)
使用-printf
:
find "$PWD" -type f -printf "%t %p\n"
输出:
Thu Jun 14 00:02:47.0173429319 2012 /tmp/superuser.com/questions/370070/bar
Thu Jun 14 20:24:16.0947808489 2012 /tmp/superuser.com/questions/228529/file with multiple spaces
Sun Jan 2 03:04:05.0000000000 1972 /tmp/superuser.com/questions/228529/old_file
解决方案 3(统计)
运行 GNUstat
在每个文件上:
find "$PWD" -type f -exec stat --format '%y %n' {} \;
输出:
2016-03-30 04:32:10.034718786 +0300 /etc/passwd
2015-12-21 19:30:07.854470768 +0200 /etc/group
提示:如果您有 GNU find,\;
可以将其替换为\+
。
答案3
这问题StackOverflow 上的 针对您问题的一部分进行了讨论。为了得到您想要的,您可以尝试以下操作:
find $ABSOLUTE_PATH_TO_DIR -ls