【发布时间】:2011-06-02 19:09:53
【问题描述】:
我从一个文件开始,其中包含随机顺序的数百个文件(完整路径)的列表。我想列出该列表中十个最新文件的详细信息。这是我天真的尝试:
$ ls -las -t `cat list-of-files.txt` | head -10
只要文件中没有空格,它就可以工作,但如果这些文件在空格处被拆分并被视为单独的文件,则会失败。文件“hello world”给了我:
ls: hello: No such file or directory
ls: world: No such file or directory
我已尝试引用原始文件列表文件中的文件,但此处的文档仍将文件拆分为文件名中的空格,将引号视为文件名的一部分:
$ ls -las -t `awk '{print "\"" $0 "\""}' list-of-files.txt` | head -10
ls: "hello: No such file or directory
ls: world": No such file or directory
我能想到的唯一方法是单独 ls 每个文件(也许使用 xargs)并创建一个中间文件,其中文件列表和日期按可排序顺序作为每行的第一个字段,然后排序那个中间文件。但是,这感觉有点麻烦且效率低下(数百个 ls 命令,而不是一两个)。但这可能是唯一的方法吗?
有没有办法将“ls”传递给要处理的文件列表,这些文件可能包含空格 - 看起来应该很简单,但我很难过。
【问题讨论】:
-
谢谢大家 - 我这里有一些有效的答案,并且正在使用 Marco 的版本。我确信 xargs 方法可以通过一些调整来运行,我会从长远来看。非常感谢所有帮助。
标签: bash shell filenames spaces ls