web-dev-qa-db-ja.com

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

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

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

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

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

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

65
Sujit Maharjan

-Ctarのオプションでこれを実現します:

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

tarのmanページから:

-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.
82
mkc

この問題に取り組むために使用できる2つの方法があります。

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

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

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

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

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

cd /your/working/directory/ 

次に、マジック* :-)

tar -cvf temp.tar *
5
Yas

実際、ケタンの答えを使って問題を見つけました

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

Dir2にあるすべてのファイルをコピーする場合は、すべてのファイルをコピーするだけです。

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

ただし、dir2ディレクトリにいない場合、*は現在のディレクトリのファイルをtarするため、問題が発生します。そして、私は以下のコマンドを使用して問題を修正しました:

 tar -C /home/username/dir1/dir2 -cvf temp.tar ./
3
Guan YANG