1

我一直按照这篇文章中的指示在目录中连接文件:Unix:合并许多文件,同时删除所有文件的第一行,但它无法正常工作。总而言之,这是正在使用的命令:

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

我尝试将名称附加到该文件并像这样重定向:

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

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

4

3 回答 3

3

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

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

安全地处理所有文件名。

于 2013-02-15T21:50:25.833 回答
2

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

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

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

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

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

于 2013-02-15T21:51:42.097 回答
1

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

find . -name '*.extension' -exec awk 'FNR > 1' + >concatenated.csv
于 2013-02-15T22:01:21.110 回答