对于这样的命令,
ls -rt | tail -n 100
将提供最新修改的100个文件。应该使用什么命令行工具来管道此查询的结果,以便将显示的所有文件名复制到单个文件中。例如:
如果文件夹有100个文件,上面的命令将为我提供所有文件名。我想将所有文件中的所有数据复制到单个第101个文件中。我该怎么做?
到目的地的cat
每个文件的命令行是我正在寻找的。但我不知道从哪里开始。
答案 0 :(得分:4)
ls -rt | tail -n 100 | xargs cat > file
xargs
命令重复从标准输入流中读取文本,使用该文本构造命令行,然后执行命令行。
xags cat
表示它将每行输入文本视为单独的参数,并使用每个输入行构造cat
命令作为cat
命令的参数。它将构造尽可能长的命令行,因此它将分叉最小数量的cat
进程。
cat
进程因此会读取您感兴趣的文件,并按顺序将其内容写入标准输出流。
> file
将该文本放入结果文件
答案 1 :(得分:2)
我发现这很简单:
cat `ls -rt | tail -n 100` > singleFile
答案 2 :(得分:1)
如果你的文件名中包含空格,我建议使用GNU find:
find . -maxdepth 1 -type f -printf '%Ts %p\n' \
| sort -nr \
| head -n100 \
| cut -d' ' -f2- \
| tr '\n' '\0' \
| xargs -0 cat > outfile
printf
的{{1}}参数在路径名前面以秒为单位插入最后修改时间,find
按降序排序,sort
获取前100个文件, head
删除修改时间戳,cut
零分隔文件列表,tr
将文件名正确传递给xargs
。
注意,如果文件名中包含换行符,则不起作用。