Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Linuxでのファイルzip化時のフォルダ構成についてまとめてみる

Linuxにてzip化を行う場合にはこちらのコマンドを実行すれば可能なのです。

zip dist.zip srcfile 

もしディレクトリごとzip化したい場合には、

zip -r dist.zip srcdir

とすればOKです。

■zipコマンド実行後の挙動
しかしながら、、、1つ困ったことがあります。
それは、指定したパスの通りにzip暗号化してしまう点です!!
例えば、

zip dist.zip /home/hoge/huga/srcdir

とした場合、dist.zipが生成されるのですが、
このdist.zipを展開すると、
/home/hoge/huga/srcdir
のフォルダ構成でsrcdirが格納されます。
圧縮したい対象がsrcdir配下に格納したファイルのみであった場合、
ここまで階層深い状態でファイルが格納されていると結構面倒。。。

ということで階層をコントロールして、自分が欲しいフォルダ構成の状態でzip化する方法についてまとめていきたいと思います。

■ファイルのみをzip化したい場合
もしファイルのみをzip化したい場合には、--junk-paths(-j)オプションを付与すればOKです。
例えば、srcdir配下に、
 ・srcfile1
 ・srcfile2
 ・srcfile3
が格納された構成に対して--junk-paths(-j)オプションを付与して、

zip -r -j dist.zip /home/hoge/huga/srcdir

を実行するとdist.zipが格納されます。
このdist.zipを解凍すると、
 ・srcfile1
 ・srcfile2
 ・srcfile3
が展開されることが確認できるかと思います。
階層が深くならなずに必要なファイルのみ暗号化出来るので便利ですね。

■フォルダパスを指定して圧縮する方法
先ほどの--junk-paths(-j)オプションを付与した方法であればファイルのみを圧縮できるのですが、、、
1つ難点があります。
それは、同じファイル名が存在する場合には圧縮出来ない!!ということです。
まぁ、ファイル名が被ってしまうので当たり前と言えばそうなのですが。

そこで、今度はフォルダパスを指定して圧縮する方法をまとめていきます。

そもそも、zip圧縮にて階層が深くなってしまう理由はzipコマンドを実行する際に
/home/hoge/huga/srcdir
のように深い階層で指定しまうことになります。

そこで、自分の好きなパスまで移動してからzipコマンドを使用すればOK!!
例えば、srcdirをzip圧縮したい場合には

cd /home/hoge/huga/
zip -r dist.zip srcdir

とすればOK。

さらに、別のフォルダも一緒に含めてzip圧縮をしたい場合には、

    • update(-u)オプションを駆使すればOK。

例えば、/home/hoge/huga/srcdir以外に、/home/hoge/huga/srcdir2も圧縮させたい場合には、

cd /home/hoge/huga/
zip -r -u dist.zip srcdir

cd /home/hoge/huga/
zip -r -u dist.zip srcdir2

とすればOK。
圧縮したdist.zipを解凍すると、
rcdirフォルダ
srcdir2フォルダ
が格納されているのが確認できるかと思います。

■最後に
基礎的な部分ですが以外に知らない内容だったので勉強になってよかったです。
また不明点などがあったら調べてまとめていきたいと思います。

■参考
https://atmarkit.itmedia.co.jp/ait/articles/1608/01/news039.html
https://uxmilk.jp/50165