我一直按照以下帖子中的指示连接目录中的文件: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
但这只抓取第一个文件。难道我做错了什么?我对这些命令非常不熟悉。
答案 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