web-dev-qa-db-ja.com

ファイルがアーカイブかどうかを確認します。はいの場合、抽出します

ファイルがアーカイブかどうかを確認し、7zで抽出するにはどうすればよいですか? fileコマンドで確認できることを理解していますが、出力が原因でスクリプトでは機能しません。アーカイブの種類を予測することはできません。私は次のようなことをしたいだけです:

7zで抽出できますか?
「はい」の場合、抽出し、
そうでない場合は、さらに進んでください

bash sriptによる。

5
Michał

7zユーティリティは、実行する操作が失敗した場合、ゼロ以外の終了コードを返します。この事実を使用してアーカイブを抽出し、それが失敗した場合は別のことを行うことができます。

if ! 7z e filename 2>/dev/null; then
    # do something else
fi

または、他に何をしたいか、またはしたくないかによって、

if 7z e filename 2>/dev/null; then
    exit
fi

# do something else

短縮されるかもしれません

7z e filename 2>/dev/null && exit

# do something else

あなたは明らかにこれを包むことができます

if 7z t filename; then

fi

そして、これが実際に7z アーカイブ。

完全なコードは次のようになります

if 7z t filename 2>/dev/null; then
    if 7z e filename 2>/dev/null; then
        echo 'All is good, archive extracted' >&2
    else
        echo 'Archive failed to extract' >&2
    fi
else
    echo '7z failed to process the file' >&2
fi
8
Kusalananda
filename=/tmp/foo.gz

if 7z t $filename; then
    7z e $filename
else
    echo $filename not an archive.
fi
11

7z t <archive>は0を返し、ファイルは有効なアーカイブでした。

6
user277591