正規表現およびzipコマンドを使用したディレクトリの除外

正規表現およびzipコマンドを使用したディレクトリの除外

私はアプリケーションを圧縮しようとしていますが、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つのステップでアーカイブを作成することです。

  1. 除外するすべての項目を除外するアーカイブを作成します。

    zip -r application.zip . -x 'vendor/*' 'node_modules/*' '.git/*' .env 'public/assets/images/*'
    
  2. 除外されたディレクトリに含めるフォルダを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は無視されます。vendornode_modulespublic/assets/imagespublic/assets/images/iconsfind

! -name ".env"find に名前付きファイルを無視するよう指示します。.env

-exec zip www.zip {} +選択したファイルに対してコマンドを実行しますzipが、コマンドラインは選択した各ファイル名を最後に追加することで構成されます。コマンドの総呼び出し数は、一致するファイルの数よりはるかに少なくなります。結果はファイルに保存されますwww.zip

関連情報