파일을 2개씩 압축

파일을 2개씩 압축

다음과 같은 800개의 파일이 있는 디렉토리가 있습니다.

file1.png
[email protected]

file2.png
[email protected]

file3.png
[email protected]

... etc

이런 zip 파일을 만들어야합니다

file1.zip (containing file1.png and [email protected])
file2.zip (containing file2.png and [email protected])
file3.zip (containing file3.png and [email protected])

마법 명령을 사용하여 이 작업을 수행할 수 있나요?

답변1

만약에항상 둘이 있어요, 매우 간단합니다.

for f in file+([0-9]).png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done

위의 내용은 명령줄에서 있는 그대로 실행됩니다. 스크립트에서 이를 사용할 계획이라면 shopt -s extglob이 줄 앞 어딘가에 이 줄을 넣으세요. ( extglob대화형 쉘에서는 기본적으로만 활성화됩니다.)

확장을 처리하지 않는 이전 bash모드에서는 이 추악한 해결 방법이 작동하지만 논리를 변경하는 것이 더 좋습니다.다른 답변에서 제안한대로저자: 레오니드:

for f in file[0-9].png file*[0-9][0-9].png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done

답변2

manatwork가 제안한 것의 약간 수정된 버전은 어떻습니까? 이 같은: for f in file*@2x.png; do zip ${f%@2x.png}.zip $f ${f/@2x./.}; done

쌍의 "두 번째" 파일만 반복하며 파일 목록 생성에는 정규식이 없습니다.

관련 정보