tarを展開するときパーミッション、所有者を一定にする

tarボールはファイルのパーミッションとuid、gidを保持しているため、root権限で展開する時には、それらの情報を保ったまま展開される。しかし、一定のgid、uid、パーミッションを持つように展開したい場面がある。例えばGTKのテーマを/usr/share/themes/に展開する場面では、所有者「root:root」、ファイルのパーミッション「rw-r--r--」、ディレクトリのパーミッション「rwxr-xr-x」が望ましい。
これまでtarボールの展開後にchownやchmodでいちいち変更していたが、tarコマンドのオプションで何とか出来ないか調べてみた。
所有者については「-o」もしくは「--no-same-owner」オプションをつけることで、root:rootにすることが出来る。
使用例:


$ []tar -ztf myGtkTheme.tar.gz[]
[]myGtk/[]
[]myGtk/index.theme[]
[]...省略...[]
$ []sudo tar -ozxf myGtkTheme.tar.gz -C /usr/share/themes[] []-ozxfの内、fが必ず最後でないと動作しない[]
$ []ls -ld /usr/share/themes/myGtk[]
[]drwx------ 4 root root 4096 2008-05-06 14:00 [][]/usr/share/themes/myGtk/[]
しかし、tarコマンドではumaskに基づいてパーミッションを狭めることは出来るが、一定の値にすることは出来ない。仕方がないのでbashスクリプトで自動化する事にした。

#!/bin/bash
#setPerm.sh
#Set permission recursively for files to 644, directories 755.
if [ $# -eq 0 ] ; then
  echo "usage: setPerm.sh target1 [target2 ...]"
  echo "targetN must be a file or directory."
fi
while [ $# -gt 0 ] ; do
  find $1 -type d -print0 | xargs -0 chmod 755
  find $1 -type f -print0 | xargs -0 chmod 644
  shift
done