隠しファイルなしでターミナル経由でディレクトリ全体の zip アーカイブを作成するにはどうすればよいですか?

隠しファイルなしでターミナル経由でディレクトリ全体の zip アーカイブを作成するにはどうすればよいですか?

隠しフォルダー/ファイルが多数含まれるプロジェクトがあります。そのプロジェクトを zip アーカイブにまとめたいのですが、アーカイブには隠しフォルダー/ファイルを含めないでください。隠しフォルダー内のファイルが隠しファイルでない場合は、そのファイルも含めないでください。

次のようにディレクトリの zip アーカイブを作成できることはわかっています。

zip -r zipfile.zip directory

また、-x オプションを使用してファイルを除外できることもわかっているので、これが機能するかもしれないと考えました。

zip -r zipfile.zip directory -x .*

うまくいきませんでした。隠しディレクトリはすべて zip ファイル内に残っていました。

答え1

まず、zip がインストールされていない場合は、次のようにしてインストールします。

sudo apt-get install zip

次に、単純に zip ファイルを作成します。

zip -r compressed_filename.zip foldername

隠しファイルを除外する場合:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@

Zip アーカイブからファイルを除外するhttp://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/

zip アーカイブを作成する際のファイル除外の基本は、-x特定の名前またはパターンに一致するファイルをアーカイブから除外するために使用されるフラグを中心に行われます。最も基本的なものは、次のようになります。

zip archive.zip files -x "ExcludeMe"

つまり、「Nothanks.jpg」という名前のファイルを1つ除外することができます。

zip archive.zip images/ -x "Nothanks.jpg"

これが役立つ具体的な例をいくつか見てみましょう。

Zip アーカイブから .DS_Store ファイルを除外する

これにより、通常は非表示の Mac メタデータ.DS_Store ファイルが、デフォルトでバンドルされている zip アーカイブに含まれなくなります。

zip -r archivename.zip archivedirectory -x "*.DS_Store"

ただし、ディレクトリにサブディレクトリが含まれている場合は、そのコマンドの別のバリエーションを使用して、サブディレクトリからも ds_store ファイルを除外する必要があります。

zip -r archive.zip directory -x "*/\.DS_Store"

注: このコマンドが正しく機能するためにすべてのシェルで引用符が必要なわけではありませんが、bash シェル (OS X のデフォルト) では、ワイルドカードやパターンを除外するために引用符を使用する必要があります。

Zip アーカイブから特定のファイル タイプを除外する

ワイルドカードを使用すると、拡張子に焦点を合わせることで、特定の種類のファイルをすべて除外することもできます。たとえば、次のコマンドは、.jpgファイルを除いたディレクトリ全体を zip 圧縮します。

zip -r archive.zip directory -x "*.jpg"

これは、ファイル名に一致する特定のファイル拡張子またはパターンに合わせて変更できます。

Zip アーカイブから .git または .svn ディレクトリを除外する

ディレクトリ.gitとその内容を除いたものを Zip 圧縮します。

zip -r zipdir.zip directorytozip -x "*.git*"

ディレクトリを含めずにフォルダーを Zip 圧縮します.svn

zip -r zipped.zip directory -x "*.svn*"

Zip アーカイブからすべての隠しファイルを除外する

パターンとワイルドカードを使用できるため、 のようなディレクトリでも、や の.svnような個別のファイルでも、先頭にピリオドが付いていることで非表示になっているファイルやフォルダーの一部またはすべてを除外することもできます。.bash_profile.htaccess

zip -r archivename.zip directorytozip -x "*.*"

または、すべてのサブディレクトリからすべての非表示ファイルを除外するには:

zip -r archive.zip directory -x "*/\.*"

答え2

これにより、非表示でないディレクトリ内の隠しファイルも除外されます。

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@

答え3

"を追加します.*(そうしないと、シェルは.*現在のディレクトリ内のドット ファイルに展開されます)。また、サブディレクトリ内の隠しファイルも除外します。

zip -r zipfile.zip . -x ".*" -x "*/.*"

.これにより、 で始まるファイルはzip ファイルに追加されなくなります。

rinzwind@discworld:~/tmp$ ls -la
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)

答え4

これには、すべての「.」ディレクトリ、サブディレクトリ、および「.」ファイルまたはディレクトリ内のディレクトリが含まれます...基本的には最初の回答ですが、最上位の「.」ファイルが含まれます。

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@

関連情報