zipコマンドでディレクトリを圧縮する際の階層構造の扱いと、-jオプションの動作について解説します。
-jオプションなしの場合(階層構造を保持)
通常、zipコマンドでディレクトリを圧縮すると、階層構造がそのまま保たれます。
# ディレクトリmyfolderを圧縮
zip -r archive.zip myfolder/
# 解凍すると
unzip archive.zip
# → myfolder/というディレクトリが作られ、その中にファイルが展開されるこれにより、圧縮したディレクトリの構造がそのまま維持されます。
-jオプションありの場合(階層構造を無視)
-jオプション(junk paths)を使用すると、ディレクトリ構造が無視され、すべてのファイルがフラットに格納されます。
# -jオプションを使用してディレクトリを圧縮
zip -j -r archive.zip myfolder/
# 解凍すると
unzip archive.zip
# → myfolder/というディレクトリは作られず、
# myfolder内のファイルが直接現在のディレクトリに展開される注意点
-jオプションを使うと、同名ファイルが存在する場合は上書きされる可能性があります- ディレクトリ構造の情報が失われるため、元の構造を復元できません
ディレクトリを保持した圧縮方法
ディレクトリを圧縮して、解凍時にもディレクトリが出てくるようにするには:
推奨方法
# 1. 対象ディレクトリの親ディレクトリに移動
cd /path/to/parent/directory
# 2. -jオプションを使わずに圧縮
zip -r archive.zip myfolder/
# この方法により、解凍時にmyfolder/ディレクトリが正しく作成されます具体例
# 例:/home/user/documents/project を圧縮したい場合
# 1. documentsディレクトリに移動
cd /home/user/documents
# 2. projectディレクトリを圧縮
zip -r project.zip project/
# 解凍すると
unzip project.zip
# → project/ディレクトリが作られ、その中にファイルが展開されるまとめ
| オプション | 階層構造 | 解凍時の動作 |
|---|---|---|
| なし | 保持される | ディレクトリ構造がそのまま復元 |
-j | 無視される | 全ファイルがフラットに展開 |
ベストプラクティス: ディレクトリを圧縮する際は、目的のディレクトリの親ディレクトリに移動してから、-jオプションなしで圧縮することで、意図した通りの構造を維持できます。