압축 파일을 먼저 추출하지 않고 zip 파일 내부의 파일을 편집하는 방법이 있습니까?


47

때로는 .zip 또는 .jar 파일을 변경해야하므로 일반적으로 파일을로 이동하고로 /tmp모든 파일을 추출 unzip하고 몇 개의 파일을 편집 한 다음 파일을 다시 압축합니다. 이것은 효과가 있지만 지루할 수 있습니다. 내가 명시 적으로 호출하지 않고 편집에 압축 파일의 파일 내부를 사용할 수있는 유틸리티 또는 쉘 스크립트 있는가 unzipzip(이 명령의 주위에 그것의 경우에도 단지 래퍼)?


대답이 .jar 파일에서 작동하는지 궁금하십니까? (나는 그것을 테스트하지 않았다.)
beroe

@beroe zip 압축 알고리즘을 사용해야하기 때문입니다. 실제로 하나의 파일을 수정하기 위해 다시 포장하고 다시 배포하고 싶지 않은 앱 서버에 .war 파일을 배포했기 때문에 솔루션을 찾는 것이 가장 큰 동기였습니다.
오스틴

큰. 아카이브 내부의 디렉토리 구조를 유지하도록 함수를 수정하려고합니다. 현재 루트 수준의 파일에서만 작동한다고 생각하지만 내 목적으로는 하위 폴더가 더 유용합니다.
beroe

@beroe 정말 멋지다. 이 질문을하기 전에, 임의의 명령을 실행하기 위해 zip 파일에 "가상"psudo-shell을 시작하기위한 python 스크립트를 코딩하려고했습니다. 나는 당신이 생각 해낸 것에 관심이 있습니다.
오스틴

하위 폴더를 지원하는 다른 솔루션을 추가했으며 제한된 테스트 에서 작동합니다 .
beroe

답변:


19

압축을 풀기 전에 아카이브의 파일 이름을 알고 있습니까? /tmpzip의 압축을 풀고 편집하고 새로 고치는 기능을 만들 수 있습니다 .

zipedit(){
    echo "Usage: zipedit archive.zip file.txt"
    unzip "$1" "$2" -d /tmp 
    vi /tmp/$2 && zip -j --update "$1"  "/tmp/$2" 
}

말하자면, 사용법은 다음과 같습니다.

zipedit myarchive.zip myfile.txt

이렇게하면 명명 된 파일의 압축이 풀리고 압축 파일이 저장 /tmp되고 편집 된 vi다음 경로에 "정크"하는 동안 파일이 다시 아카이브에 추가됩니다. 다음을 가정하여 .bash_profile에 추가하십시오 bash...

편집 : 아래는 아카이브 내부의 하위 폴더와 함께 작동하는 버전입니다 ... 참고, 폴더 이름 앞에 슬래시를 사용 myfolder/file.txt하지 마십시오 (예 : not /myfolder/file.txt). 아카이브에 존재하지 않는 파일을 편집하면 자동으로 생성됩니다. 또한 zip 파일의 절대 경로로 작동하는지 확실하지 않습니다. 친척과 함께하는 것이 가장 좋습니다.

zipedit(){
    echo "Usage: zipedit archive.zip folder/file.txt"
    curdir=$(pwd)
    unzip "$1" "$2" -d /tmp 
    cd /tmp
    vi "$2" && zip --update "$curdir/$1"  "$2" 
    # remove this line to just keep overwriting files in /tmp
    rm -f "$2" # or remove -f if you want to confirm
    cd "$curdir"
}

질문 주셔서 감사합니다. 아마 이것도 사용하게 될 것입니다!

또 다른 편집 : 테스트되지 않은,하지만 난 읽었 vimemacs것 모두 편집 jar 파일을 직접?


vim이 Linux의 명령 행에서 zip 파일을 편집하는 데 훌륭하게 작동 함을 확인할 수 있습니다.
Thomas Bindzus

59

Vim은 zip 파일 내의 파일을 투명하게 편집 할 수 있도록 지원합니다. 그냥 실행하십시오 :

vim file.zip

zip 보관 파일 내의 파일 목록이 표시됩니다. 편집하려는 것을 선택하고 원하는 것을 변경하고 : x로 종료하십시오.

vim응답하는 경우 :

변경할 수 없습니다. '수정 가능'이 꺼져 있습니다.

.. 그냥 실행 :set modifiable하거나 :set ma(출처 : https://stackoverflow.com/questions/5745506/vim-modifiable-is-off )


2
그건 그렇고, vim의 기본 zip 지원은 한 수준의 ZIP 만 편집 할 수 있습니다. ZIP 내부의 ZIP을 편집해야하는 경우이 vim 플러그인을 사용해야 합니다 .
jesjimher

1
이맥스와 동일합니다.
Mike

4
정답으로 표시되어야합니다.
Martijn Burger

3
생명의 은인. vim의 멋진 기능과 예상치 못한 기능
Peter Perháč

4

짧은 대답 : NO.

이 래퍼 있다면, 당신은 하는 이 명령을 호출. 어쨌든, 내가 생각할 수있는 최선의 방법은 file-rollerX 환경에있는 경우 설정에 따라 간단한 더블 클릭으로 작동 할 수있는을 사용하여 파일을 여는 것입니다 . 그런 다음 압축 파일을 두 번 클릭하여 연 다음 편집 할 수 있습니다.

$ file-roller b3.zip 

편집 한 파일을 저장하면 다음 대화 상자가 나타납니다.

이를 위해 스크립트를 만들 수도 있지만 여러 파일이 포함 된 압축 아카이브를 사용하면 복잡해집니다. 그것이 당신이 필요로하는 것이라면 알려 주시면 뭔가를 요리 할 수 ​​있습니다.

여기에 이미지 설명을 입력하십시오


0

짧은 pedantic 답변; 아니. 압축에 대해 생각하면 중복성을 사용하여 내부의 파일을 줄이므로 편집하면 아카이브 내의 전체 파일 (아카이브)이 변경됩니다.

이론적이지 않고 실용적이면서도 "수동으로 압축을 풀고 압축하고 싶지는 않습니다."사용할 수있는 도구가 있습니다. Linux의 ark 는 내가 사용한 것입니다. 또한 임시 파일보다 더 많은 작업이긴하지만 fuse-zip을 사용 하여 아카이브를 마운트 할 수도 있습니다.


누군가가 왜 -1을했는지 모르겠다. 일에 대한 fuse-zip.
myrdd

0

zip(쉬운 참조를위한 온라인 버전 : http://linux.die.net/man/1/zip ) 매뉴얼 페이지에 따르면 , zip명령에는 -u다음과 같이 설명 하는 플래그가 있습니다.

Zip 아카이브의 기존 항목이 이미 Zip 아카이브의 버전보다 최근에 수정 된 경우에만 Zip 아카이브의 기존 항목을 교체 (업데이트)하십시오.


0

Directory Opus 12 파일 관리자를 사용하면 Zip을 탐색 한 다음 편집 한 파일을 다른 폴더에서 끌어다 놓아 편집하려는 파일을 덮어 쓰면 즉시 작업이 수행됩니다. 아주 쉽게



0

예를 들어 standart KDE 텍스트 편집기를 사용할 수 있습니다.

  1. 보관 관리자에서 보관 파일 열기
  2. KDE GUI 편집기에서 텍스트 파일 열기
  3. 텍스트 파일을 저장하고 시스템에서 아카이브를 새로 고치도록 요청합니다. 예를 클릭하십시오.
  4. 보관 및 보관 폴더에 대한 권한을 잊지 마십시오 (내가 가장 좋아하는 실수)

게시물의 서식을 수정하십시오.
davidbaumann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.