2012-09-04 5 views
0

큰 jar 파일이있는 큰 홈 디렉토리가 있습니다. 내 홈 디렉토리에있는 jar 파일 내의 모든 txt 파일의 내용을 단일 텍스트 파일로 집계해야합니다.jar에서 txt 파일을 추출합니다.

누군가가 도와 줄 수 있습니까? 이 스크립트를 작성하는 방법을 모르겠습니다. Linux 시스템을 사용하고 있습니다.

가 요약하자면, 나는 다음을 수행해야합니다

  1. 모든 jar 파일을 찾기
  2. 가 단일 출력 파일로이 TXT 파일의 내용을 가져 jar 파일 내의 모든 TXT 파일을 찾기
+2

"일반적인 txt 파일에 쓰는"의미는 무엇입니까? 그러나 .jar 파일은 일부 메타 데이터 규칙이 추가 된 .zip 파일 (및주의 할 필요가없는 공식화 된 압축 알고리즘 세트와 같은 몇 가지 다른 차이점)에 유의하십시오. 간단한 "압축 해제"로 압축을 풀고 파일 트리를 직접 조작 할 수 있습니다. 더 쉽게 찾을 수 있습니다. –

답변

4

파일명에서 적절한 공백 문자 처리를 생략하면 다음과 같이 나타납니다.

searchdir='/home/username/' 
outputtxt='/home/username/out.txt' 

for jar in $(find "$searchdir" -iname '*.jar'); do 
    for txt in $(unzip -l "$jar" | awk '/\.txt$/ {print $NF}'); do 
    unzip -c "$jar" "$txt" | tail -n +3 >> "$outputtxt" 
    done 
done 

출력 파일에 압축 해제 헤더를 포함 시키려면 내부 루프에서 | tail -n +3을 생략 할 수도 있습니다. 예 헤더 :

Archive: /home/username/filename.jar 
    inflating: META-INF/maven/pom.xml 
0

나는 아마 - 그것을

for jarfile in `ls -1 *.jar` 
do 
    txtfiles=`jar tf "$jarfile"|grep ".txt"` #find all txt files in the jar 
    for files in $txtfiles 
    do 
     jar xf "$jarfile" $file  #extract just the txt file 
     if [ $? -eq 0 ]    #check if extract was successful 
     then 
     cat "$file" >> aggregate_file.txt 
     rm -rf "$file"    #clean up the un-jar 
     else 
     print "Cannot extract $file from $jarfile..." 
     fi 
    done 
done 

Herejar에 대한 설명이다 할 jar 도구를 사용합니다.

관련 문제