디렉토리의 모든 디렉토리를 압축된 디렉토리의 이름을 딴 파일로 압축하는 방법

디렉토리의 모든 디렉토리를 압축된 디렉토리의 이름을 딴 파일로 압축하는 방법

단일 디렉토리의 모든 디렉토리를 자신의 이름을 딴 파일로 압축하고 싶습니다. 예를 들어 tar-all.sh를 사용합니다.

dir___
      |- dirA
      |- dirB
      |- tar-all.sh

~이 되다

dir___
      |- dirA.tar.tgz
      |- dirB.tar.tgz
      |- tar-all.sh

답변1

for루프를 사용하십시오 .

#!/bin/bash

for f in *
do
    echo "Creating tarball of $f..."
    tar -zcf $f.tar.gz $f
done

결과 :

> ./tar-all.sh
> Creating tarball of tar-all.sh...
> Creating tarball of dirA...
> Creating tarball of dirB...
> DONE!

  |- dirA.tar.tgz
  |- dirB.tar.tgz
  |- tar-all.sh.tar.gz

답변2

다음은 이 디렉터리의 모든 하위 디렉터리를 찾아 보관합니다 dir(원래 하위 디렉터리 제거).

for subdir in dir/*/; do
    dirname="$( basename "$subdir" )"
    ( cd "$dir" && tar -cz -f "$dirname.tgz" "$dirname" && rm -rf "$dirname" )
done

이 패턴은 dir/*/그 아래 하위 디렉터리의 경로 이름과만 일치하며 dir디렉터리가 아닌 경로 이름에는 일치하지 않습니다 /.

또는 명시적 대신 -C옵션을 사용하십시오 .tarcd

for subdir in dir/*/; do
    dirname="$( basename "$subdir" )"
    tar -cz -f "dir/$dirname.tgz" -C dir "$dirname" && rm -rf "$subdir"
done

시험:

$ tree
.
`-- dir
    |-- a
    |   `-- file
    |-- b
    |   `-- file
    |-- c
    |   `-- file
    `-- complicated name
        `-- file

5 directories, 4 files

(여기서 두 루프 중 하나를 실행하십시오)

$ tree
.
`-- dir
    |-- a.tgz
    |-- b.tgz
    |-- c.tgz
    `-- complicated name.tgz

1 directory, 4 files

관련 정보