숨겨진 폴더/파일이 많은 프로젝트가 있습니다. 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 -@