ファイルが別のディレクトリに保存されている場合、親ディレクトリを含めずにtarアーカイブを作成する


11

ファイルシステムに次の4つのファイルがあります。

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

これらのファイルをtarアーカイブに入れる必要がありますが、ディレクトリを追加したくありません。私が思いつくことができる最高のものは:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

アーカイブ内の各ファイルは2つのディレクトリの深さがあるため、これはまだ完全ではありません。もっと良い方法はありますか?それとも私は単純にコピーする必要がありますs1s2r3そしてr5一つのディレクトリにファイルをしてしてアーカイブを作成しますかtar -czvf archive.tgz s1 s2 r3 r5

回答:


17

-C複数回使用できます(1つのディレクトリから別のディレクトリに移動)。

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

-Cオプションは、その時点での現在のディレクトリ基準にして解釈されることに注意してください(または絶対パスを使用できます)。


11

ファイル内にファイルのリストがある場合、またはコマンドを使用してファイルを生成できる場合は、単一のGNU tarコマンドを使用できます。

tar cf foo.tar -T list-of-files --transform 's:.*/::'

トランスフォームは引き続きディレクトリを保持しますが、レイアウトを完全にフラット化します。したがって、ディレクトリをフィルタリングする方法が必要です。そのため、ファイルのリストが必要です。


8

ファイルを1つずつアーカイブに追加できます。

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

これをスクリプト化して簡単にすることができます。各パスtar rfについて、-Cパラメータの値としてベースディレクトリを使用し、パスを追加せずにベースファイル名で実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.