Linux Commandline组合文件

时间:2012-09-06 11:46:58

标签: linux command-line cat ls

对于这样的命令,

ls -rt | tail -n 100 

将提供最新修改的100个文件。应该使用什么命令行工具来管道此查询的结果,以便将显示的所有文件名复制到单个文件中。例如:

如果文件夹有100个文件,上面的命令将为我提供所有文件名。我想将所有文件中的所有数据复制到单个第101个文件中。我该怎么做?

到目的地的cat每个文件的命令行是我正在寻找的。但我不知道从哪里开始。

3 个答案:

答案 0 :(得分:4)

ls -rt | tail -n 100 | xargs cat > file

  1. xargs命令重复从标准输入流中读取文本,使用该文本构造命令行,然后执行命令行。

  2. xags cat表示它将每行输入文本视为单独的参数,并使用每个输入行构造cat命令作为cat命令的参数。它将构造尽可能长的命令行,因此它将分叉最小数量的cat进程。

  3. cat进程因此会读取您感兴趣的文件,并按顺序将其内容写入标准输出流。

  4. > 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

注意,如果文件名中包含换行符,则不起作用。