내 응용 프로그램을 압축하려고 하는데 하나를 제외한 모든 이미지 디렉터리를 제외하고 싶습니다.
다음 폴더 구조를 고려하세요.
/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
내 제안은 두 단계로 아카이브를 만드는 것입니다.
제외하려는 모든 항목을 제외하는 아카이브를 만듭니다.
zip -r application.zip . -x 'vendor/*' 'node_modules/*' '.git/*' .env 'public/assets/images/*'
제외된 디렉터리에서 포함하려는 폴더 하나를 동일한 아카이브에 추가합니다.
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
.