問題は、出力を引用した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