2017-10-13 5 views
2

이름을 바꾸려는 복수 pdf 개의 파일이 있습니다. 새로운 이름은 pdf의 파일 내용에서 특정 (5 번째 줄을 말하십시오) 행에서 가져와야합니다. 예를 들어 파일의 5 번째 줄에 내용이 some string < 인 경우이 문자열은 파일 이름이어야합니다. 나머지 파일도 똑같은 일을합니다. 각 파일은 내용의 5 행으로 이름을 변경해야합니다. 나는 터미널리눅스에서 해당 내용의 특정 행의 이름이있는 pdf 파일의 이름을 바꿉니다.

for pdf in *.pdf 
do 
    filename=`basename -s .pdf "${pdf}"` 
    newname=`awk 'NR==5' "${filename}.pdf"` 
    mv "${pdf}" "${newname}" 
done 

그것을 복사 파일이 시도했지만 이름이 잘못 문자열입니다. 나는 시스템이 일반 텍스트와 이미지로 파일을 보지 못한다는 것을 알고있다. 메타 데이터, XML 태그 등이있다. 그러나 그 라인에서 내용을 가져 오는 방법이 있는가?

+0

에서 파일을 열었습니까? ext 편집기? –

+0

예, 특수 기호 및 기타 데이터가 있음을 알고 있으며 pdf와 동일하게 보이지 않습니다 –

+0

"라인 5"는 특정 파일 형식을 이미 알지 못하는 한 의미가 없다는 것을 의미합니다. 당신이 찾고있는 것을 알고 있다면 - 즉, 파일 이름 앞뒤에있는 특정 키 문자열을 알고 있다면, 5 행째를 읽는 대신에 그 센티넬 값을 사용할 수 있습니다. 그렇지 않으면, 나는 이것이 생각하지 않습니다. 일하게. –

답변

2

즉시 사용 가능한 bash 및 그 유틸리티는 pdf 파일을 읽을 수 없습니다. 그러나 less은 pdf 파일에서 텍스트를 복구 할 수 있습니다.

for pdf in *.pdf 
do 
    mv "$pdf" "$(less $pdf | sed '5q;d').pdf" 
done 

설명 :

  • less "$pdf"을 : 당신은 다음과 같이 스크립트를 변경할 수있는 PDF 파일의 텍스트 부분을 표시합니다. 계정으로 간격 걸릴 것이
    • less가 원하는 출력
  • sed '5q;d'에게 반환하는 경우 몇 가지 테스트가 볼 수 있도록 : 입력 파일

선택적의 5 라인을 추출하고, 다음을 사용할 수 있습니다 빈 줄을 제거하고 공백을 초과하는 스크립트 :

mv "$pdf" "$(less "$pdf" | sed -e '/^\s*$/d' -e 's/ \+/ /g' | sed '5q;d').pdf" 
+0

답장을 보내 주셔서 감사합니다. 죄송합니다. 저는 bash 스크립팅에 멍청한 사람입니다. 지금은 빈 문자열로 파일의 이름을 바꿉니다. 나는 –

+0

을 알아 내려고 노력할 것입니다. 왜냐하면 pdf의 5 번째 줄이 실제로 비어 있기 때문입니다. 'less myfile.pdf'을 시도하고 원하는 텍스트가 실제로 5 번째 줄인 지 확인하십시오 – Aserre

+0

또는 파일에서 모든 빈 줄을 제거 할 수 있습니다. 이 문제를 해결하기 위해 내 대답을 편집 할 것입니다. – Aserre