私はアプリケーションを圧縮しようとしていますが、1つ以外のすべての画像ディレクトリを除外したいと思います。
次のフォルダ構造を考えてみましょう。
/images
│
└───/foo // exclude
│
└───/bar // exclude
│
└───/foobar // exclude
│
└───/icons // include
私が理解したところ、このzip
コマンドは引数に正規表現を許可しないので、どうすればいいのかわかりません。
私はいくつかの調査を行った結果、これを行う方法があると信じています。ls
/find
しかし、方法は完全にはわかりません。誰でも私に何をすべきかを提案できますか?
これは私の現在のコマンドです(除外みんなイメージディレクトリ):
zip -rq application.zip . -x vendor/\* node_modules/\* .git/\* .env public/assets/images/\*
私はこのようなものが必要だと思います(まだ実際に動作する正規表現を取得できませんでした)。
find ./public/assets/images -maxdepth 1 -regex '\.\/(?!icons).* | zip -rq application.zip . -x vendor/\* node_modules/\* .git/\* .env INSERT_FIND_RESULTS_HERE
修正する
完全なアプリケーションディレクトリは次のようになります。
/www
│ .env
│ .env.example
│ .env.pipelines
│ .gitignore
│ artisan
│ etc...
│
└───/.ebextensions
└───/.git
└───/app
└───/bootstrap
└───/config
└───/database
└───/infrastructure
└───/node_modules
└───/public
│ │ .htaccess
│ │ index.php
│ │ etc...
│ │
│ └───/assets
│ │ └───/fonts
│ │ └───/images
│ │ │ └───/blog
│ │ │ └───/brand
│ │ │ └───/capabilities
│ │ │ └───/common
│ │ │ └───/contact
│ │ │ └───/icons
│ │ │ └───/misc
│ │ │ └───etc...
│ │
│ └───/js
│ └───/css
│
└───/storage
└───/tests
└───/vendor
以下を除くすべてのファイルを圧縮したいと思います。
vendor/
node_modules/
.git/
.env
public/assets/images/ (excluding public/assets/images/icons)
アップデート2
find
公開した後、正規表現はプレビューを許可しないため、grep
検索と検索を組み合わせて使用する必要があることに気づきました。だからここに私の最新のコマンドがあります(それでもまだ動作しません)。
find ./public/assets/images -maxdepth 1 -regex '\./public/assets/images/.*' | grep -oP '\./public/assets/images/(?!icons).*' | xargs zip -rq application.zip . -x vendor/\* node_modules/\* .git/\* .env
ちなみに私はそれをどのように使用するのかわかりませんxargs
。これが上記の方法が期待どおりに機能しない理由だと思います。
答え1
私の提案は、2つのステップでアーカイブを作成することです。
除外するすべての項目を除外するアーカイブを作成します。
zip -r application.zip . -x 'vendor/*' 'node_modules/*' '.git/*' .env 'public/assets/images/*'
除外されたディレクトリに含めるフォルダを1つ同じアーカイブに追加します。
zip -r application.zip public/assets/images/icons/
(デフォルトの動作は、zip
ファイルがすでに存在する場合は既存のアーカイブに追加することです。)
答え2
次のコマンドを実行してみてください。
find /www \( -path "*/public/assets/images/*" -a \( ! -path "*/public/assets/images/icons" -a ! -path "*/public/assets/images/icons/*" \) \) -o \( -path "*/.git*" \) -o \( -path "*/vendor*" \) -o \( -path "*/node_modules*" \) -prune -o \( ! -name ".env" \) -exec zip www.zip {} +
説明する
パラメーターの後ろから始まり/www
、パラメーターで終わる最初の式はディレクトリーを-prune
表し、除外.git
は無視されます。vendor
node_modules
public/assets/images
public/assets/images/icons
find
! -name ".env"
find に名前付きファイルを無視するよう指示します。.env
-exec zip www.zip {} +
選択したファイルに対してコマンドを実行しますzip
が、コマンドラインは選択した各ファイル名を最後に追加することで構成されます。コマンドの総呼び出し数は、一致するファイルの数よりはるかに少なくなります。結果はファイルに保存されますwww.zip
。