Linux에서 변수를 파악하는 데 문제가 있음

Linux에서 변수를 파악하는 데 문제가 있음

다음은 내가 시도하는 코드입니다.

{    
echo "Enter dirname and hit Return"
read input1
echo "Enter a pattern to be searched for in the current directory"
read input2
find /*/${input1}/*/logs/*/*/*/* -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "${input2}"' {} \;
}

input1이 일치하는 동안 input2는 일치하지 않는 것 같습니다. 그리고 input1에 대한 모든 출력을 얻지만 input2에 대해서는 일치하지 않습니다.

목적은 모든 .gz 파일을 읽고 키워드 input2 일치를 얻는 것입니다.

답변1

호출된 "내부" 스크립트는 변수 find에 액세스할 수 없습니다 $input2.

당신은 이것을 할 수 있습니다

find /*/"$input1"/*/logs/*/*/*/* -name '*.gz' \
    -exec sh -c 'gzip -cd "$1" | grep -e "$0"' "$input2" {} \;

그러면 의 값이 $input2내부 스크립트에 전달되어 사용 가능하게 되며, $0파일 이름 매개변수는 가 됩니다 $1.

또는 find파일의 압축을 풀고 find전체 출력을 필터링하면 됩니다.

find /*/"$input1"/*/logs/*/*/*/* -name '*.gz' \
    -exec gzip -cd {} + | grep -e "$input2"

find지정된 최상위 디렉토리의 모든 하위 디렉토리에 이미 이동했으므로 파일 이름 glob 중 일부를 생략하고 대신 사용할 수 있으며 ( -mindepth 4find옵션을 지원하는 경우) -type f관심 있는 항목만 표시하기 위해 추가할 수 있습니다. 일반 파일에서:

find /*/"$input1"/*/logs -mindepth 4 -type f -name '*.gz' \
    -exec gzip -cd {} + | grep -e "$input2"

관련 정보