回答:
要件を考えると、この小さなスクリプトが最適なオプションのようです。
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を実行します。({}は一致するファイルに置き換えられます)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
これにより、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
デフォルトでコマンドに表示される現在のディレクトリを除外します。
for dir in *