隠しフォルダー/ファイルが多数含まれるプロジェクトがあります。そのプロジェクトを 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 -@