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