![특정 이름의 폴더를 재귀적으로 tar+gzip으로 압축하는 방법은 무엇입니까?](https://linux55.com/image/174630/%ED%8A%B9%EC%A0%95%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%ED%8F%B4%EB%8D%94%EB%A5%BC%20%EC%9E%AC%EA%B7%80%EC%A0%81%EC%9C%BC%EB%A1%9C%20tar%2Bgzip%EC%9C%BC%EB%A1%9C%20%EC%95%95%EC%B6%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
여러 개의 중첩된 폴더가 있는 대용량 파일 구조가 있습니다. 특정 이름으로 각 폴더를 tar+gzip으로 압축하고 원본 폴더를 삭제하고 싶습니다.
이 예에서는 스크립트가 다음으로 끝나는 모든 폴더를 감지하고 .abc
해당 폴더를 tar+gzip으로 압축하여 원래 폴더를 제거하고 .gz를 유지하도록 하려고 합니다.
Main Folder/
Project 1/
Prj1FolderA.abc/
...lots of tiny files and maybe subfolders...
Prj1FolderB.abc/
...lots of tiny files and maybe subfolders...
Prj1FolderC.abc/
...lots of tiny files and maybe subfolders...
Project 2/
Prj2FolderA.abc/
...lots of tiny files and maybe subfolders...
Prj2FolderB.abc/
...lots of tiny files and maybe subfolders...
Prj2FolderC.abc/
...lots of tiny files and maybe subfolders...
Project 3/
Prj3FolderA.abc/
...lots of tiny files and maybe subfolders...
Prj3FolderB.abc/
...lots of tiny files and maybe subfolders...
Prj3FolderC.abc/
...lots of tiny files and maybe subfolders...
Project 4/
Another Folder Inside/
Prj4FolderA.abc/
...lots of tiny files and maybe subfolders...
Prj4FolderB.abc/
...lots of tiny files and maybe subfolders...
Prj4FolderC.abc/
...lots of tiny files and maybe subfolders...
이 스크립트를 실행한 후 폴더를 다음과 같이 만들고 싶습니다.
Main Folder/
Project 1/
Prj1FolderA.abc.tar.gz
Prj1FolderB.abc.tar.gz
Prj1FolderC.abc.tar.gz
Project 2/
Prj2FolderA.abc.tar.gz
Prj2FolderB.abc.tar.gz
Prj2FolderC.abc.tar.gz
Project 3/
Prj3FolderA.abc.tar.gz
Prj3FolderB.abc.tar.gz
Prj3FolderC.abc.tar.gz
Project 4/
Another Folder Inside/
Prj4FolderA.abc.tar.gz
Prj4FolderB.abc.tar.gz
Prj4FolderC.abc.tar.gz
이는 단지 예일 뿐이며 폴더 이름은 위와 완전히 동일하지 않을 수도 있고 모두 2단계 깊이일 수도 있습니다. 그 사이에 여러 개의 폴더가 있을 수 있습니다.
을 사용하여 이 작업을 수행한다고 가정하고 있지만 올바른 정보를 원본 폴더 find
에 전달하고 삭제하는 방법을 잘 모르겠습니다 . tar
감사해요!
답변1
다음에서 실행 Main Folder
:
find . -type d -name '*.abc' -exec sh -c '
for d; do tar -C "$d" -zcf "$d.tar.gz" . && rm -r "$d"; done
' findsh {} +
제가 테스트해 봤지만 여러분도 테스트해 보시길 권합니다. 문제가 발생하더라도 데이터가 손실되지 않도록 앞에 echo
하나를 추가하세요 .rm
내부 루프가 실행되고 tar
( 성공한 rm
경우에만 tar
) "*.abc" 전역 패턴과 일치하는 하위 디렉터리를 찾습니다.