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