"find -exec" 로 파일 복사후 압출 풀기

익명 사용자의 이미지

find 명령의 -exec 옵션에 대해 궁금한 점이 있습니다.
만약 dir1, dir2, dir3에 file1.xx.gz, file2.xx.gz, file3.xx.gz이 각각 들어있다고 하겠습니다.
현 워킹 디렉토리에 dir1, dir2, dir3와 dest 디렉토리가 있다고 할때

find . -name "*.gz" -exec cp {} ./dest \; -exec gunzip {} \;

위와 같이 실행을 할 경우 각 디렉토리의 gz파일을 dest로 복사는 가능합니다.
하지만 복사 전 dir1,2,3내의 파일이 압축해제가 됩니다.

예상하셨겠지만, 제가 원하는 것은 복사한 후 dest폴더 내의 gz 파일을 압축해제 하는 것입니다.

어떻게 가능할까요?

익명 사용자의 이미지

man find
man gunzip

manpage에 찾고자 하는 모든 것이 있습니다.

chanik의 이미지

아래와 같이 하시면 될 겁니다.

find . -name "*.gz" -exec cp {} ./dest \; -exec sh -c 'gunzip ./dest/`basename {}`' \;

sh를 통해 gunzip을 실행하지 않고 아래와 같이 바로 gunzip을 실행하고 싶지만, basename이 find 안에서 제대로 동작하지 않네요 (참고: Find and basename not playing nicely)

find . -name "*.gz" -exec cp {} ./dest \; -exec gunzip ./dest/`basename {}` \;  # 오동작함

작성자의 이미지

감사합니다. 좋은 내용 알게되었습니다.