我是从包含数百个文件(完整路径)列表的文件开始。我想列出该列表中十个最新文件的详细信息。这是我天真的尝试:

$ 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

我能想到的唯一方法是单独使用每个文件(也许使用XARG),并创建一个中间文件,其中包括文件列表和日期作为每行中的第一个字段,然后对该中间文件进行排序。但是,这感觉有点繁琐且效率低下(数百个LS命令而不是一两个)。但这可能是唯一做到这一点的方法?

是否有任何方法可以将“ LS”列表传递到处理中,这些文件可能包含空格 - 似乎应该简单,但我很难过。

有帮助吗?

解决方案

您可以强迫Bash使用另一个字段分隔符,而不是“一个或多个空白字符”:

OIFS=$IFS
IFS=$'\n'

ls -las -t $(cat list-of-files.txt) | head -10
IFS=$OIFS

但是,我认为此代码不会比进行循环更有效。此外,如果文件列表中的文件数量超过最大参数数量,那将无效。

其他提示

尝试这个:

xargs -a list-of-files.txt ls -last | head -n 10

我不确定这是否会起作用,但是您是否尝试过使用 \?使用SED或其他东西。 sed "s/ /\\\\ /g" list-of-files.txt, , 例如。

这对我有用:

xargs -d\\n ls -last < list-of-files.txt | head -10
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top