問題は、出力を引用したfindため、単一の文字列として扱われるため、forすべてのファイルを含む単一の引数でループが 1 回だけ実行されることです。つまり、実行head -1 file1 file2 file3 file4 ...などを意味し、複数のファイルが指定されたときにヘッダーをhead出力します。==> file1 <==
したがって、これを修正するには、シェルアウトを囲む二重引用符を削除します。これにより、意図したとおりに、ファイルごとに 1 回ループfindを実行できるようになります。forまた、シェルアウト後のセミコロンは不要です。
#!/bin/bash
rm FIRSTLINE
for file in $(find $1 -type f)
do
head -1 $file >> FIRSTLINE
done
cat FIRSTLINE
ただし、これにはいくつかのスタイルの問題があります。本当にファイルに書き込み、次にcatファイルを標準出力に書き込む必要がありますか? 出力を標準出力に出力するだけです。
#!/bin/bash
for file in $(find $1 -type f)
do
head -1 $file
done
個人的には以下のように書きます。
find $1 -type f | xargs -L1 head -1
または、出力をファイルに出力して標準出力に出力する必要がある場合:
find $1 -type f | xargs -L1 head -1 | tee FIRSTLINE