在日期顺序中列出文件,并在文件名中的空格
题
我是从包含数百个文件(完整路径)列表的文件开始。我想列出该列表中十个最新文件的详细信息。这是我天真的尝试:
$ 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
不隶属于 StackOverflow