Zip 보관 파일에서 긴 이름의 파일 이름을 바꾸거나 추출하는 방법


11

매우 긴 이름을 가진 파일이 들어있는 zip이 있습니다.

명령 행에서 추출하려고하면 "파일 이름이 너무 깁니다"라는 오류가 발생합니다.
그래픽 아카이브 관리자를 사용하면 파일을 추출하지 않으며 이름을 바꿀 수 없습니다. 아카이브를 마운트하면 동일한 문제가 발생합니다.

다음을 사용하여 파일을 개별적으로 추출하고 이름을 바꿀 수 있습니다.

unzip -p -c example.zip "long file name.ogg" > shortname.ogg

파일이 많으면 실용적이지 않습니다.

파일 이름을 추출 할 때 파일 이름을 자르는 도구가 있습니까?


출력 결과는 무엇 unzip -l <ARCHIVE>이며 어떻게 이름을 자르기를 원합니까? 추출 중에 아카이브 내부의 디렉토리 구조를 유지 하시겠습니까?
David Foerster

답변:


13

추출하려면

우리는 zipinfo이 과정의 일부로 사용할 수 있으며 zip패키지 의 프로그램입니다 .

zipinfo -2 example.zip

의 파일 이름 만 표시됩니다 example.zip.

file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html

이 기능을 사용하여 모든 파일을 추출 할 수 있습니다.

zipinfo -2 example.zip | while read i;
do
  long_fname=${i%.*}
  unzip -p -c example.zip "$i" > "${long_fname:0:250}.${i##*.}"
done;
  • long_fname=${i%.*}: 파일 이름이 256 자 미만인 경우 긴 파일 이름에서 확장자를 제거합니다. 중복 확장자를 얻지 못할 것입니다.
  • ${long_fname:0:250}.${i##*.}: 합법적 인 문자 수로 새 파일 이름을 작성 .하고 파일 확장명을 추가합니다.

간단히 우리는 파일 목록으로 루핑하고 256 문자 인 새로운 합법적 인 파일 이름으로 각 파일을 추출합니다.


이름을 바꾸려면

zipnote명령 을 사용할 수 있으며 zip패키지 의 일부이기도 합니다.

zip 파일의 백업을 먼저 받으십시오.

이 명령을 실행하십시오 :

zipnote example.zip > names

편집기를 사용하여 이름을 열면 다음과 같습니다.

@ file name long in zip and a lot of other strings in the file name
@ (comment above this line)
@ (zip file comment below this line)

다음과 같이 새 파일 이름을 추가하십시오.

@ file name long in zip and a lot of other strings in the file name
@=new short name for above file
@ (comment above this line)
@ (zip file comment below this line)

그런 다음 파일 이름을 바꾸려면 다음을 사용하십시오.

zipnote -w example.zip < names

이름을 모두 바꾸고 자동으로 수행하는 간단한 스크립트를 작성할 수도 있습니다.


그것들은 매우 유용합니다, 감사합니다! 나는 zipnote 예제를 작동시킬 수 없었고 첫 번째는 파일 확장자를 제거했다. 그러나 그것은 내가해야 할 일에 충분하다. 감사!
테렌스 에덴

답변을 업데이트했습니다. 이제 확장도 유지됩니다.)
Ravexina

당신은 사용해야하는 IFS= read -r i파일 이름이 공백으로 시작하거나 쉘 이스케이프 시퀀스로 해석 할 수 있다는 것을 포함하는 경우.
David Foerster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.