unix zipコマンドを使用してディレクトリを圧縮したいと思います。ディレクトリが次のように構成されているとします。
dir1/
dir1/dir2/
dir1/dir2/file1
dir1/dir2/file2
dir1/dir3
dir1/dir3/file1
dir1/file1
dir1/file2
含めるdir1
ように圧縮したいが含まれません。簡単に言えば、その下のすべてのファイルとすべてのファイルを圧縮したいのですが、どのファイルも圧縮したくありません。dir1.zip
dir1.zip
dir1/file1, dir1/file2, dir1/dir2/file1, dir1/dir2/file2, dir3/
dir1/dir3/file1
dir1
dir2
dir3
これにより、その中のすべてのファイルとサブフォルダがzip dir1 dir1/
圧縮されますdir1
が、サブフォルダの内容は圧縮されません。これにより、すべてのファイルとすべてのサブフォルダを含むzip -r dir1 dir1/
その中のすべてのコンテンツが圧縮されます。dir1
どのサブフォルダを再帰的に圧縮するか、どのサブフォルダを圧縮しないかを制御できるようにしたいです。
ありがとうございます。
答え1
$ zip -r dir1 dir1 -x dir1/dir3/*
私のために動作します。-x
除外オプションです。インクルードオプションも使用できますが、この場合、除外オプションには入力が必要ありません。
実際、この問題は完全には明確ではありません。下のすべてのディレクトリとファイルを除外しますかdir3
、または下のファイルのみを除外しますかdir3
?上記のコマンドは後者でのみ機能します。
答え2
アーカイブファイルを使用する1つの方法は、そのファイルをマウントしてから通常のディレクトリのようにアクセスすることです。ヒューズ次のように使用できます。ほとんどのユニスそしていくつかのことをサポートします圧縮ファイルへのファイルシステムの透過アクセス。 zipファイルの場合、可能性は次のとおりです。ヒューズジッパー(AVFSまた便利ですが読み取り専用です。
たとえば、fusion-zipを使用してアーカイブをマウントし、ここにファイルをコピーする方法は次のとおりです。
mkdir tmp
fuse-zip /path/to/zip tmp
rsync -av --exclude='/dir1/dir3/*' dir1 tmp/
fusermount -u tmp; rmdir tmp
答え3
dir1の親ディレクトリで次のコマンドを試してください。
tar --exclude=dir3/* -cf - dir1/ | zip dir1.zip -
dir1.zip を解凍するには、次のコマンドを使用します。
unzip -p dir1.zip | tar xf -
答え4
信頼できる唯一の方法は、zip
アーカイブするファイルのリストを渡すことです。たとえば、次のようになります。
find dir1 \! \( -path dir1/dir3 -prune \) | sort | zip dir1.zip -@
これにより、アーカイブに除外されたディレクトリやそのサブディレクトリは含まれません。の引数は、そのディレクトリの出力と正確に一致する必要があります-path
。find
バラよりこの回答複数のディレクトリを整理する方法を学びます。