ディレクトリ内のすべてのファイルを個別のzipファイルに再帰的に圧縮しますが、別のディレクトリに格納します


1

同様の質問が寄せられましたが、探しているものを正確に見つけることができませんでした。基本的に、サブディレクトリと多数のファイルを含む大きなディレクトリがあり、各ディレクトリとサブディレクトリに再帰的に移動して、各ファイルを個別に圧縮したいです。私はこの解決策を見つけましたが、それは私が望むものではありません:

find . -type f -execdir zip '{}.zip' '{}' \;

ソース

これにより、zipファイルが元のディレクトリに出力されます。ただし、zipファイルは完全に別のディレクトリに配置する必要がありますが、ディレクトリ構造は同じで、結果のzipファイルのみが必要です。誰でもこれを助けることができますか?


すべてのディレクトリとファイルを含むディレクトリをどこかにcp -rできます。次に、もう一度findを使用して、zip以外のファイルをすべて削除します。例:find -タイプf!-name '* .zip'-
NanoPish

私はたくさんのファイルを持っているので、できるだけ少ない操作でこれをしたいです。そうでなければ、私はそれをするでしょう。
-AnthonyWeston

回答:


1

zipファイルの場所への相対パスを次のように前に追加できます。

find . -type f -exec zip -D '../zipdir/{}.zip' '{}' \; 

必要に応じて、ディレクトリ構造を作成するために次のことができます。

find . -type d -exec mkdir -p '../zipdir/{}' \;

これを行うと、エラーが発生します:zip I / Oエラー:そのようなファイルまたはディレクトリはありませんzipエラー:出力ファイル(../test1_zipped/./file.zip)を作成できませんでした
-AnthonyWeston

そこで、出力用の最上位ディレクトリ(test1_zipped /)を作成してみましたが、これは、zipの元となる最上位ディレクトリの各ファイルを圧縮しますが、サブディレクトリのファイルは圧縮しません。このソリューションで出力ディレクトリにディレクトリ構造全体を再作成する必要がありますか?自動化する方法はありますか?
-AnthonyWeston

0

zipファイルと結婚していない場合は、マウント可能な、問題のディレクトリツリー全体のsquashfsイメージを作成できます(特定のzipファイルを開いて、内容を確認する必要はありません)。たくさんの個別のzipファイルではなく、「ソリッド」アーカイブのようにツリー全体を一緒に表示するため、圧縮率も向上する場合があります。

基本的には、必要なのはsquashfs-toolsパッケージ(Debian / Ubuntuで呼ばれているもので、Linuxファミリごとに異なる名前である可能性があります)が必要です:

mksquashfs /some/directory  archive.squashfs

それをマウント/表示/閲覧するには:

mount archive.squashfs /mnt/mountpoint -t squashfs

-tフラグはオプションの場合もありますが、mountはタイプの自動判別に非常に適しています。-o loopフラグも必要ではありませんが、必要な場合に備えて試してください。

http://tldp.org/HOWTO/SquashFS-HOWTO/creatingandusing.htmlを参照するか、squashfsの使用方法を検索してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.