2012-09-04 77 views
0

我有一個很大的主目錄,其下有很多jar文件。我需要將我的主目錄中的jar文件中的所有txt文件的內容聚合到一個文本文件中。從jar中提取txt文件

有人可以幫助我嗎?我不知道如何爲此編寫腳本。我正在使用Linux系統。

總結一下,我需要:

  1. 查找所有jar文件
  2. 找到JAR文件中的所有TXT文件
  3. 獲取這些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

我大概會用jar工具做它 -

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描述。