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これは、ファイルごとに1回ではなく、すべてのファイルに対して1回だけ実行されます。

于 2013-02-15T21:51:42.097 に答える
1

各ファイルを個別に使用する代わりにtail、一度に複数のファイルを処理できる別のツールを使用することもできます。例awk

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