ファイル(たとえば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}"
アーカイブを隣のディレクトリに抽出するには、このオプションを使用します。
unar
macOS(および対応するGUIアプリケーション、アーカイブ解除)、Windows、Linuxはさまざまなディストリビューションでパッケージ化されています。例えば unar
Debianとその派生物、Fedoraとその派生物、community/unarchiver
Arch 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"
}