我经常使用以下习惯用法来查找从当前目录开始的文件树中的所有文件,然后提交文件路径,ls -lt
以便按最新顺序显示它们:
$ find * -type f -print0 | xargs -0 ls -lt | head -n 20
我很惊讶最新的文件不见了。经过一番排查,我发现原因是xargs
默认情况下处理 322 个项目,而最新的文件不位于前 322 个文件路径中。
我可以进一步侦查以调整 322 的最大值,但由于我并不总是知道我需要多少,所以我寻找ls
从文本文件读取文件路径的方法。这样,我可以将find
ed 文件路径发送到(比如说)~/tmp/FilePaths.txt
并ls
从那里读取它们。
有没有办法做到ls
这一点?按时间顺序排序的文件数量是否有限制ls -lt
?具体来说,我需要将每一行都~/tmp/FilePaths.txt
解释为文件路径。
sed
如果我使用双引号修饰每行以强制将该行解释为单个参数(例如),那么实现此目的的选项会更多ls $(cat ~/tmp/FilePaths)
。但是,某些文件名将包含双引号。我在企业 Windows 环境中使用 Cygwin,因此文件名可以是任意的。
完全避免使用可能会更容易
ls
。GNU
find
可以报告上次修改时间,并以纪元秒为单位进行报告。这样可以轻松对结果进行排序。例如
报告
%T@
时间以秒为单位;%t
以人类可读的形式进行报告,并且%p
是路径名。sort
然后我们就可以head
得到