파일을 하위 디렉터리로 출력

파일을 하위 디렉터리로 출력

egrep텍스트로 가득 찬 폴더에서 여러 가지 다른 패턴을 실행하고 결과를 적절한 폴더에 출력하고 싶습니다 . 또한 이것은 제가 많이 사용할 워크플로우이기 때문에 간단하고 간결하게 유지하려고 노력했습니다.

그래서 텍스트로 가득 찬 폴더가 있고 docs두 가지 다른 정규식 패턴(regex1 및 regex2)을 찾아 출력하고 싶습니다 docs/regex1.docs/regex2

이런 게 효과가 있을 것 같아요

mkdir {docs/regex1,docs/regex2}
for file in docs/*
do
    egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
    egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt
done

이로 인해 오류가 발생합니다.

regex1/docs/001_regex1.txt: No such file or directory
regex2/docs/001_regex2.txt: No such file or directory

각 파일마다. regex1/docs로 이동하는 대신 docs/regex1로 이동하도록 출력을 어떻게 설정합니까?

답변1

예제 스크립트에는 다음이 있습니다.

egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt

그런데 당신은 이렇게 묻습니다.

각 파일마다. regex1/docs로 이동하는 대신 docs/regex1로 이동하도록 출력을 어떻게 설정합니까?

regex1출력을 리디렉션할 경로의 시작 부분에 명시적으로 배치합니다 . 원하는 것과 일치하도록 이 문제를 수정한 다음 기본 경로를 제거하세요 $file.

egrep -o -f regex1 "$file" > docs/regex1/"$( basename "${file%.*}" )"_regex1.txt
egrep -o -f regex2 "$file" > docs/regex2/"$( basename "${file%.*}" )"_regex2.txt

관련 정보