특정 이름의 폴더를 재귀적으로 tar+gzip으로 압축하는 방법은 무엇입니까?

특정 이름의 폴더를 재귀적으로 tar+gzip으로 압축하는 방법은 무엇입니까?

여러 개의 중첩된 폴더가 있는 대용량 파일 구조가 있습니다. 특정 이름으로 각 폴더를 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" 전역 패턴과 일치하는 하위 디렉터리를 찾습니다.

관련 정보