디렉토리의 모든 파일을 압축하시겠습니까?

디렉토리의 모든 파일을 압축하시겠습니까?

명령을 사용하여 특정 디렉토리의 모든 파일을 압축하는 방법이 있습니까 zip? 을 사용하는 것에 대해 들어봤지만 *.*확장자가 없는 파일에서도 작동하고 싶습니다.

답변1

그냥 사용할 수 있습니다 *. 꼭 필요한 것은 아닙니다 *.*. 파일 확장자는 Unix에서 특별하지 않습니다. *점을 포함하여 0개 이상의 문자와 일치합니다. 따라서 foo.png0개 이상의 문자(정확히는 7개)이기 때문에 일치합니다 .

*점으로 시작하는 파일은 기본적으로 일치하지 않습니다(또한 일치하지 않음 ) *.*. 이것은 일반적으로 당신이 원하는 것입니다. 그렇지 않은 경우 bash에서 shopt -s dotglob수행하는 경우(그러나 여전히 제외 ...). 다른 쉘에는 도트 파일이 다르게 포함되거나 전혀 포함되지 않습니다.

또는 전체 디렉토리 트리를 한 번에 실행하는 (재귀) 옵션이 zip있습니다 -r(도트 파일에 대해 걱정할 필요가 없습니다).

zip -r myfiles.zip mydir

mydir파일이 포함된 디렉터리는 어디에 있습니까? 생성된 zip에는 디렉터리 구조와 파일이 포함됩니다. Peterph가 자신의 의견에서 지적했듯이 이는 일반적으로 좋은 것으로 간주됩니다. zip을 추출하면 추출된 모든 파일이 하위 디렉터리에 깔끔하게 저장됩니다.

-j/ 옵션을 사용하여 zip에 경로를 저장하지 않도록 지시할 수도 있습니다 --junk-paths.

이 명령은 문서를 볼 수 zip있는 모든 (많은) 옵션을 알려주는 문서와 함께 제공됩니다 . man zip이것은 zip에만 국한되지 않습니다. 이 방법으로 대부분의 명령에 대한 문서를 얻을 수 있습니다.

답변2

내 경우에는 각 파일을 자체 아카이브로 압축하고 싶었기 때문에 다음을 수행했습니다( 에서 zsh).

$ for file in *; do zip ${file%.*}.zip $file; done

답변3

또 다른 방법은 find 및 xargs를 사용하는 것입니다. (zip에 "." 디렉토리가 포함될 수 있지만 여전히 올바르게 추출되어야 합니다. 테스트에서 zip은 압축하기 전에 점을 제거합니다.) find . -type f -exec zip zipfile.zip {} +

(귀하의 버전이 exec의 끝을 지원하지 않는 경우, +이를 해당 버전으로 대체할 수 있습니다. 하지만 속도는 느려질 것입니다...)\;find+

기본적으로 여기에는 모든 하위 디렉터리가 포함됩니다. -maxdepth이는 GNU find 에서 방지할 수 있습니다.

답변4

.zip파일이 아니라 디렉터리 gzip *의 각 파일을 자체 파일로 압축 .gz하고 원본 파일을 삭제하는 짧은 명령입니다. 다른 많은 도구들이 .gz파일을 직접 처리할 수 있기 때문에 많은 상황에서 정말 편리합니다 .

user@computer:~/test$ touch test1.txt
user@computer:~/test$ touch test2.txt
user@computer:~/test$ touch test3.txt
user@computer:~/test$ ls
test1.txt  test2.txt  test3.txt
user@computer:~/test$ gzip *
user@computer:~/test$ ls
test1.txt.gz  test2.txt.gz  test3.txt.gz

관련 정보