답변:
이 작은 스크립트는 요구 사항을 고려할 때 가장 좋은 옵션 인 것 같습니다.
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
이름에 공백이있는 디렉토리를 올바르게 처리합니다.
이건 어때: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
설명 : 현재 디렉토리의 모든 항목에서 찾기를 실행합니다. Maxdepth 0은 주어진 인수보다 낮게 재귀하지 않습니다. (이 경우 * 또는 현재 디렉토리의 모든 항목) "-type"에 대한 'd'인수는 디렉토리와 만 일치합니다. 그런 다음 exec는 일치하는 항목에 대해 tar를 실행합니다. ({}는 일치하는 파일로 대체됩니다)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
그러면 blah라는 디렉토리의 각 파일에 대해 blah.tar.gz라는 파일이 작성됩니다.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
디렉토리에 단순히 디렉토리 이상의 디렉토리가있는 경우 (즉, ls는 디렉토리의 모든 것을 반환하므로 파일을 사용하십시오) 다음을 사용하십시오.
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
grep -v find
는 기본적으로 명령에 표시 될 현재 디렉토리를 제외합니다 .
for dir in *