ディレクトリ内の一部のファイルからデータを再帰的に収集し、そのファイルに値を返すシェルスクリプト

ディレクトリ内の一部のファイルからデータを再帰的に収集し、そのファイルに値を返すシェルスクリプト

私は親ディレクトリの下のすべてのディレクトリを検索し、いくつかのファイルの内容をgrepするのにかかる時間を最小限に抑える簡単なシェルスクリプトを作成しています。これは私のスクリプトです。

#!/bin/sh
MainDir=/var/opt/database/1227-1239/

cd "$MainDir"

for dir in $(ls); do

grep -i "STAGE,te_start_seq Starting" "$dir"/his_file | tail -1 >> /home/xtee/sst-logs.out

if [ -f "$dir"/sysconfig.out];
then
    grep -A 1 "Drive Model" "$dir"/sysconfig.out | tail -1 >> /home/xtee/sst-logs.out
else
    grep -m 1 "Physical memory size" "$dir"/node0/setupsys.out | tail -1 >> /home/xtee/sst-logs.out
fi

done

このスクリプトはSTAGE,te_start_seq Startingファイルの下の文字列を特定してhis_fileダンプする必要がありますsst-logs.out。しかし、私の問題はステートメントの一部ですif。スクリプトは現在のディレクトリを確認しsysconfig.out、grep drive modelfromを確認し、存在する場合はそれをダンプする必要がありますsst-logs.out。それ以外の場合は、ディレクトリをnode0grep physical memory sizefromに変更してsetupsys.outダンプする必要がありますsst-logs.out。私の問題は、このif then elseステートメントがデータをまったくダンプしないため動作しないようですが、手動でgrepを実行するとデータがあることです。

私のシェルスクリプトには何の問題がありますか?これを行うより効率的な方法はありますか?

ベストアンサー1

if [ -r "$dir"/sysconfig.out ];

tとの間のスペースに注意してください]

おすすめ記事