2017-09-20 12 views
0

現在のフォルダ内のすべてのアーカイブを抽出する必要があります。私がやっていることは、正しく名前を付けられたすべてのものだけを抽出しますが、アーカイブにはそれらの上に拡張された拡張子を持つことができます。間違った拡張子でもすべてのアーカイブをどのように抽出しますか?

file.tar.gvz

またはfile.tar.potatogz

またはfile.sss.faz

gunzip *.tar.gz >/dev/null 2>/dev/null 
    echo $? 
    echo "gzip" 
    tar -xvf *.tar >/dev/null 2>/dev/null 
    echo $? 
    echo "tar" 
    unzip '*.zip' >/dev/null 2>/dev/null 
    echo $? 
    echo "zip" 

編集: fileコマンドが行くための正しい方法のように思えるが、ネストしたループで動作させることはできません。ディレクトリループの外側にあるときはうまく動作します。

for D in *; do 
    if [ -d "${D}" ]; then 
    cd $D 
    bool=false 
     for files in * 
     do 
     type=$(file -b $files | awk '{printf $1;}') 
     echo "next is type" 
     echo $type 
     done 
     cd.. 
done 
+2

gzip( 'file'コマンド)タイプのファイルをテストしてから、gunzipそれらのものだけ? – Dinesh

+0

ファイルコマンドを使用しようとしましたが、出力を変数に格納しようとしました "エラー:開くことができません" これは正しくありません。 type = $(file -b $ files | awk '{ print $ 1;} ') – M2bandit

+0

*を解凍しようとすると、zipファイル以外のファイルは解凍されません。 –

答えて

1

Fileコマンドはこれを解決しました。 ファイルに関する私の問題は、引用符で解決しました。

type=$(file -b "$j" | awk '{printf $1;}') 
0

あなたが本当に近いようです。このようなものはいかがですか? gunzipのは、標準入力から読み込むとき

for D in *; do 
    if [ -d "${D}" ]; then 
     cd $D 
     for file in *; do 
      type="$(file -b "$file" | awk '{print $1}')" 
      case "$type" in 
       'gzip') gunzip $file; continue ;; 
       'zip') unzip $file; continue ;; 
       'tar') tar xzf $file; continue ;; 
       '*') continue ;; 
      esac 
     done 
     cd .. 
    fi   
done 
1

、それはファイル名が間違っていたことを知らない:

cat archive_with_wrong_name | gunzip -c 

あるいはさらに簡単に...

gunzip -c <archive_with_wrong_name 

あるいはさらに簡単に...

gzcat archive_with_wrong_name 
関連する問題