디렉터리의 일부 파일에서 데이터를 재귀적으로 수집하고 해당 파일에 값을 반환하는 쉘 스크립트

디렉터리의 일부 파일에서 데이터를 재귀적으로 수집하고 해당 파일에 값을 반환하는 쉘 스크립트

나는 상위 디렉토리 아래의 모든 디렉토리를 검색하고 일부 파일의 내용을 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와 사이의 공백에 유의하십시오 ].

관련 정보