텍스트 파일이 아직 존재하지 않으면 하위 디렉토리의 모든 파일을 pdftotext해야합니다.pdftotext 이미 존재하지 않는 경우 하위 디렉토리에있는 모든 파일
find . -name "*.pdf" | while read file; if [ ! -e $file.txt ] do pdftotext $file; done;
을하지만납니다 : 나는 시도했다 -bash : 구문 오류
텍스트 파일이 아직 존재하지 않으면 하위 디렉토리의 모든 파일을 pdftotext해야합니다.pdftotext 이미 존재하지 않는 경우 하위 디렉토리에있는 모든 파일
find . -name "*.pdf" | while read file; if [ ! -e $file.txt ] do pdftotext $file; done;
을하지만납니다 : 나는 시도했다 -bash : 구문 오류
내가 제안 '다 예기치 않은 토큰`가까이 :
find . -name "*.pdf" | while IFS= read -r file; do if [ ! -e "$file.txt" ]; then pdftotext "$file"; fi; done
참조 : help while
및 help if
데이터를 셸로 파이프하지 마십시오. 의 쉘 루프를find
내에 실행하십시오.
script='
for f in "[email protected]"; do
if ! [ -e "$f" ]; then
pdftotext "$f"
fi
done
'
find . -name '*.pdf' -exec sh -c "$script" _ {} +
이 어떤 유효한 파일 이름, 줄 바꿈을 포함하는 경우에도 하나 일 것입니다. find
은 호출 될 때마다 가능한 한 많은 파일을 스크립트에 전달하고 모든 파일을 처리하는 데 필요한만큼 스크립트를 호출합니다.