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

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

私のファイルシステムには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つのディレクトリの深さにあるため、まだ完璧ではありません。もっと良い方法がありますか?それともs1s2ファイルをディレクトリにコピーしてを使用してアーカイブを作成しr3ますか?r5tar -czvf archive.tgz s1 s2 r3 r5

答え1

-Cこのコマンドは複数回使用できます(あるディレクトリから別のディレクトリに移動するため)。

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

-Cオプションは現在のディレクトリに基づいて解釈されます。その瞬間(あるいは絶対パスを使用しても構いません。)

答え2

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

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

変換により、目次はそのまま残りますが、レイアウトは完全に平坦化されます。したがって、ディレクトリ、つまりファイルのリストをフィルタリングする方法が必要です。

答え3

アーカイブにファイルを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し、デフォルトのファイル名を使用して実行します。

関連情報