리눅스는 여러 하위 디렉토리를 별도의 아카이브로 압축합니까? 디렉토리를 별도의

하위 디렉토리를 별도의 아카이브로 압축하려면 어떻게해야합니까?

예:

directory
 subdir1
 subdir2

subdir1 (.tar) .gz 및 subdir2 (.tar) .gz를 작성해야합니다.



답변

이 작은 스크립트는 요구 사항을 고려할 때 가장 좋은 옵션 인 것 같습니다.

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를 실행합니다. ({}는 일치하는 파일로 대체됩니다)


답변

그러면 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는 기본적으로 명령에 표시 될 현재 디렉토리를 제외합니다 .