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


16

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

예:

directory
 subdir1
 subdir2

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

답변:


27

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

cd directory
for dir in */
do
  base=$(basename "$dir")
  tar -czf "${base}.tar.gz" "$dir"
done

이름에 공백이있는 디렉토리를 올바르게 처리합니다.


bash는 : -c : 라인 1 : 구문 오류 : 그것은 나를이 오류를 제공 예기치 않은 파일의 끝을
EarthMind

@ EarthMind : 여기에서 잘 작동합니다. 스크립트가 올바르게 복사되었는지 확인하십시오.
Juliano

@EarthMind : 그렇다면 원래 질문을 잘 작성했는지 잘 모르겠습니다. 이전 .tar.gz 파일 만 남겨두고이 파일을 다시 실행하고 새 .tar.gz 파일을 가져 오시겠습니까? "tmstamp = $ (date '+ % Y % m % d- % H % M')"를 추가하고 $ {base}를 $ {base}-$ {tmstamp}로 변경하십시오.
freiheit 2009

2
@EarthMind : 모든 것을 한 줄에 넣으려면 tar 명령 바로 앞에 세미콜론 (;)이 있는지 확인하십시오. 그렇지 않으면 base는 쉘 보조 변수가 아닌 환경 변수로 tar에 전달됩니다.
Juliano

@mwojtera 당신이 시도한 편집은 그 자체의 대답이어야합니다
병아리

10

이건 어때: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;

설명 : 현재 디렉토리의 모든 항목에서 찾기를 실행합니다. Maxdepth 0은 주어진 인수보다 낮게 재귀하지 않습니다. (이 경우 * 또는 현재 디렉토리의 모든 항목) "-type"에 대한 'd'인수는 디렉토리와 만 일치합니다. 그런 다음 exec는 일치하는 항목에 대해 tar를 실행합니다. ({}는 일치하는 파일로 대체됩니다)


1
그러나 여전히 주어진 경로가 파일이 아니라 디렉토리라는 오류가 계속 발생합니다.
EarthMind

3
gzip만으로는 디렉토리를 보관하지 않습니다
Juliano

gzip을 사용하려면 디렉토리를 tar해야합니다.
ℝaphink

1
디렉토리의 경우 gzip이 아닌 z 옵션을 사용하여 tar가 필요합니다. 그래도 아주 좋은 사용법입니다.
freiheit 2009

3
오류 : "찾기 : 경로가 식 앞에 와야합니다.;" 첫 번째 부분은 작동하므로 다음과 같이 사용했습니다 (디렉토리 만 해당). for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
JosephK

4

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


3
ls와 find는이 방식으로 사용되지 않았습니다. 특히 ls는 파일 목록을 'for'에 대한 인수로 생성하지 않고 사용자가 읽을 수있는 목록에 파일을 표시하기위한 것입니다. 그냥 사용하십시오for dir in *
Juliano

1
첫 번째 제안을 시도했지만 이름에 공백이 포함 된 디렉토리에서는 작동하지 않습니다
EarthMind

또한 첫 번째 명령은 디렉토리의 각 파일에 대해 tarball을 만듭니다.
ℝaphink
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.