ファイルと同じ名前のフォルダに展開します(拡張子.zipを除く)。

ファイルと同じ名前のフォルダに展開します(拡張子.zipを除く)。

ファイル(たとえばfoo.zip)を同じ名前()のフォルダに解凍するにはfoo/

デフォルトでは、(現在のフォルダの代わりに)同じ名前のフォルダにファイルを解凍するunzipエイリアスを作成したいと思います。これはMacのunzipユーティリティが動作する方法であり、CLIでも同じことをしたいと思います。

答え1

私は使うunarこれを行うには、デフォルトでアーカイブに複数のトップレベルファイルまたはディレクトリが含まれている場合は、抽出したコンテンツを保存するディレクトリを作成し、説明に従ってアーカイブにちなんで名前を付けます。

unar foo.zip

次のオプションを使用すると、すべての場合にディレクトリの作成を強制できます-d

unar -d foo.zip

または、関数内で次のことを行うことができますunzip

unzd() {
    if [[ $# != 1 ]]; then echo I need a single argument, the name of the archive to extract; return 1; fi
    target="${1%.zip}"
    unzip "$1" -d "${target##*/}"
}

これ

target=${1%.zip}

行は.zip他に関係なく拡張子を削除します(したがって、はなりますfoo.zip)。これfoo~/foo.zip~/foo

${target##*/}

パラメータ拡張最後にすべて削除/して~/fooくださいfoo。これは、関数が.zip現在のディレクトリからそのファイルの名前を付けたディレクトリにすべてのファイルを抽出することを意味します。unzip $1 -d "${target}"アーカイブを隣のディレクトリに抽出するには、このオプションを使用します。

unarmacOS(および対応するGUIアプリケーション、アーカイブ解除)、Windows、Linuxはさまざまなディストリビューションでパッケージ化されています。例えば unarDebianとその派生物、Fedoraとその派生物、community/unarchiverArch Linux。

答え2

以下は、1-linerを使用して現在のディレクトリ内の複数のzipファイルを処理できる別のバリ​​エーションです。

for f in *.zip; do unzip "$f" -d "${f%.zip}"; done

ファイルが1つしかない場合(つまり、関数で使用されている場合)は、次のようになります。

unzip "$1" -d "${1%.zip}"

答え3

使用解凍 -d exdir zipfile.zipzipファイルを特定のディレクトリに抽出します。原則として、投稿を文字通り読むと、次の関数を書くことができます。

unzip_d () {
    unzip -d "$1" "$1"
}

欲しいから。圧縮拡張は削除されましたが、特殊変数構文を使用してこれを実行できます。

unzip_d () {
    zipfile="$1"
    zipdir=${1%.zip}
    unzip -d "$zipdir" "$zipfile"
}

関連情報