サブディレクトリを個別のアーカイブに圧縮するにはどうすればよいですか?
例:
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
コマンドに表示される現在のディレクトリを除外します。