web-dev-qa-db-ja.com

Linux gzip複数のサブディレクトリを個別のアーカイブに?

サブディレクトリを個別のアーカイブに圧縮するにはどうすればよいですか?

例:

directory
 subdir1
 subdir2

Subdir1(.tar).gzおよびsubdir2(.tar).gzを作成する必要があります

16
EarthMind

要件を考えると、この小さなスクリプトが最適なオプションのようです。

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

名前にスペースが含まれるディレクトリを適切に処理します。

28
Juliano

これはどう: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;

説明: 現在のディレクトリのすべてのアイテムに対して検索を実行します。 Maxdepth 0は、指定された引数よりも低く再帰しません。 (この場合、*、または現在のディレクトリ内のすべてのアイテム) "-type"の 'd'引数は、ディレクトリのみに一致します。次に、execは一致するものに対してtarを実行します。 ({}は一致するファイルに置き換えられます)

10

これにより、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コマンドに表示される現在のディレクトリを除外します。

4
Philip Reynolds