다음과 같은 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
쌍의 "두 번째" 파일만 반복하며 파일 목록 생성에는 정규식이 없습니다.