親ディレクトリを含めずに tar アーカイブを作成する

親ディレクトリを含めずに tar アーカイブを作成する

スクリプト用のグラフィカル プログラムを作成しようとしています。

スクリプト内では、tar を使用して tar アーカイブを作成します。

グラフィカル プログラムから、tar アーカイブを作成するファイルの完全な名前を取得します。

tar -cvf temp.tar /home/username/dir1/dir2/selecteddir 

私の tar アーカイブには、home、username、dir1、dir2、selecteddir が含まれていますが、tar で selecteddir のみを含むアーカイブを作成したいと考えています。

答え1

-Cこれを実現するには、次のオプションを使用できますtar

tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir

のマニュアルページよりtar:

-C directory
         In c and r mode, this changes the directory before adding the following files.  
         In x mode, change directories after opening the archive but before extracting 
         entries from the archive.

答え2

この問題に対処するには 2 つの方法があります。

私の意見では、最初の方法の方が簡単です。cd圧縮したいディレクトリのすぐ上のディレクトリに単に配置するだけです。この場合は、 になりますdir2

$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir

--transform2 番目の方法は、式を取得してファイル名に対して実行するオプションを使用することです。注: 式ではsedエスケープする必要があります。/sed

$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'

答え3

まず、作業ディレクトリに移動し、

cd /your/working/directory/ 

それから魔法を使います*:-)

tar -cvf temp.tar *

答え4

そのドット ディレクトリを回避するには、事後にそれを削除できます。

tar czC /path/to/dir . --transform='s,^\./,,' >| foo.tgz

これにより、コンテンツ/path/to/dir

関連情報