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


62

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

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

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

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

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

回答:


79

-Cオプションを使用してtarこれを達成できます。

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

のmanページから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.

あなたは、私が家/ユーザ名/ DIR1 / DIR2 /件までselecteddirとパスに$パスを分割することができます方法を知っているので、私は、ユーザー-Cオプションすることができません
Sujit Maharjan

@sujitMaharjanを使用dirnameすると、「selecteddir」まですべてを抽出し、「selecteddir」を抽出できますbasename。引数として$ pathを使用して2つのコマンドを試してください。
mkc 14年

2
これはGNU TarとBSD Tarの両方に有効であると付け加えてください。
ルークエクストン

5
-Cオプションではグロビングを使用できないことに注意してください。tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'動作しません。
クリスチャンロング

動作しない:tar:selecteddir:statできません:そのようなファイルまたはディレクトリはありません
-tribbloid

11

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

私の意見では、最初の方が簡単です。単純にcd、直接あなたが圧縮する1以上のディレクトリにコピーします。この場合はになりますdir2

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

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

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

最初の方法では、最後にドット(。)が必要ですか?私はせずにそれを試してみましたが、得ました:tar: Cowardly refusing to create an empty archive。ドットがあると、迷惑なことにルートにという名前のディレクトリが含まれ.ます。だから、近いが完璧ではない。
JW01

1
私の以前のコメントにさらに。問題を解決しました。$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *私のために働いた。ドットの代わりにアスタリスクを使用します.。更新:うーん-隠しファイルを失いましたが。
JW01

6

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

cd /your/working/directory/ 

次に、マジックを使用します*:-)

tar -cvf temp.tar *

...私は隠しディレクトリをアーカイブしようとしていると私は(* NO)それらを直接追加する場合、それは動作しますが、使用しているとき*それが唯一のアーカイブにアーカイブの名前が追加されます
オーレ

1

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

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 ./

6
ただし、temp.tarアーカイブには.ルートフォルダーとして含まれています。
cgrim
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.