私はbashスクリプトに初めて触れました。
unpack [-r] [-v] file [file...]
-v - verbose
-r - recursive - will traverse contents of folders recursively, performing unpack on each.
どの圧縮が使用されているかを確認し、これらの種類の圧縮を解凍する必要があります。
ファイル名と拡張子は何も意味がないとします。使用する方法を知る唯一の方法は、fileコマンドを使用することです。 4つの解凍オプションがあります。 gunzip, bunzip2, unzip, uncompress
だから私はExecute_unpackingという関数を書いた。
#!/bin/bash
exectute_unpacking(){
for FILE in "${@}"
do
local FILE_TYPE=$(file "${FILE}")
# How to get the compression type of the file?
case "${FILE_TYPE}" in
*bzip2) bunzip2 ${RECURSIVE} "${FILE}" ;;
*gzip) gunzip ${RECURSIVE} "${FILE}" ;;
*Zip) unzip ${RECURSIVE} ${FILE} ;;
*compress) uncomprees ${RECURSIVE} ${FILE} ;;
?) echo "${FILE} cannot be extarcted" ;;
esac
done
}
したがって、$(file ${FILE})に基づいてZip、bzip2、圧縮、gzipを確認する必要があります。
これは正しいアプローチですか? (dtrxなどの外部ツールを使用したくありません)
たとえば、ファイルが4つある場合は、次のようになります。
$(file -i archive) => archive: text/plain; charset=us-ascii
$(file -i archive.bz2) => archive.bz2: application/x-bzip2; charset=binary
$(file -i archvive.gz) =>archive.gz: application/x-gzip; charset=binary
$(file -i archive.cmpr) => archive.cmpr: application/x-compress; charset=binary
したがって、FILE_TYPE変数の4つのオプションgzip、圧縮、bzip2、txtを割り当ててから、ケースの説明に従ってこれらのパターンを一致させる必要があります。
./unpack.sh archive.zipを試しても、残念ながら何も起こりません。
助けてくれてありがとう!
ベストアンサー1
努力する:
local file_type=$(file -b "${FILE}" | awk '{print $1}')
その後、XZ、gzipなど、またはそれが生成するすべてをテストできます。