숨겨진 파일 없이 터미널을 통해 전체 디렉토리의 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"인 단일 파일을 제외할 수 있습니다.

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 -r archive.zip directory -x "*.jpg"

이는 파일 이름과 일치하는 특정 파일 확장자 또는 패턴에 대해 수정될 수 있습니다.

Zip 아카이브에서 .git 또는 .svn 디렉토리 제외

디렉토리를 압축하고 .git내용을 뺀 다음:

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

디렉토리를 포함하지 않고 폴더를 압축합니다 .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 -@

관련 정보