다음은 내가 시도하는 코드입니다.
{
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 4
이 find
옵션을 지원하는 경우) -type f
관심 있는 항목만 표시하기 위해 추가할 수 있습니다. 일반 파일에서:
find /*/"$input1"/*/logs -mindepth 4 -type f -name '*.gz' \
-exec gzip -cd {} + | grep -e "$input2"