1

对于这样的命令,

ls -rt | tail -n 100 

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

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

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

4

3 回答 3

4

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

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

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

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

  4. > file将该文本放入结果文件中

于 2012-09-06T11:53:27.020 回答
2

我发现这很简单:

cat `ls -rt | tail -n 100` > singleFile
于 2012-09-06T12:04:23.423 回答
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参数在find路径名前面插入最后修改时间(以秒为单位),sort按降序排序,head获取前 100 个文件,cut删除修改时间戳,tr零分隔文件列表xargs并将文件名正确传递给cat.

请注意,如果文件名中有换行符,这将不起作用。

于 2012-09-06T13:41:08.520 回答