如何输出合并到文件?

时间:2013-02-15 21:41:26

标签: bash merge

我一直按照以下帖子中的指示连接目录中的文件:Unix: merge many files, while deleting first line of all files,但它无法正常工作。总之,这是使用的命令:

find . -name "*.extension" | xargs -n 1 tail -n +2

我尝试将名称附加到此文件并重定向,如下所示:

find . -name "*.extension" | xargs -n 1 tail -n +2 > concatenated.csv

但这只抓取第一个文件。难道我做错了什么?我对这些命令非常不熟悉。

3 个答案:

答案 0 :(得分:3)

问题是你的文件包含空格或引号,默认情况下xargs不喜欢。如果您使用find和xargs的GNU版本,则可以使用

find . -name "*.extension" -print0 | xargs -0 -n 1 tail -n +2 > concatenated.csv

安全地处理所有文件名。

答案 1 :(得分:2)

对于像这样的简单命令,您可以跳过xargs并使用-execdir主要命令:

find . -name "*.extension" -execdir tail -n +2 '{}' \; > concatenated.csv

受Kevin的回答启发,您也可以使用

find . -name "*.extension" -execdir tail -q -n +2 '{}' + > concatenated.csv

只会在所有文件上运行tail次,而不是每个文件运行一次。

答案 2 :(得分:1)

您可能希望使用另一个可以同时处理更多文件的工具,而不是单独在每个文件上使用tail。例如awk

find . -name '*.extension' -exec awk 'FNR > 1' + >concatenated.csv