
ファイルを保存するために絶対パスを使用してtarアーカイブを作成しました。
/home/mydir/dir1/dir2/dir3/file1.dat
/home/mydir/dir1/dir2/dir3/file2.dat
/home/mydir/dir1/dir2/dir3/file3.dat
パスの先頭をスキップしてこのアーカイブを解凍したいと思います/home/mydir/dir1
。私のファイルは、次の構造のすべてのディレクトリに復元する必要があります。
dir2/dir3/file1.dat
dir2/dir3/file2.dat
dir2/dir3/file3.dat
tarコマンドまたは他の手段を使用してこれをどのように実行できますか?
答え1
GNU tarを使用している場合は、抽出時に一部の先行パスメンバーを選択的に削除できます。
`--strip-components=number'
Strip given number of leading components from file names before extraction.
For example, suppose you have archived whole `/usr' hierarchy to a
tar archive named `usr.tar'. Among other files, this archive
contains `usr/include/stdlib.h', which you wish to extract to the
current working directory. To do so, you type:
$ tar -xf usr.tar --strip=2 usr/include/stdlib.h
(からGNU tar ドキュメント.)
あなたの場合は--strip=3
申請する必要があります。
答え2
GNU tar(含まれていないLinuxおよびCygwinにあります)を使用すると、アーカイブにメンバーを追加または抽出するときにパスに正規表現置換を適用できます。--transform
オプション。
tar -xf foo.tar --transform='s!^/home/mydir/dir1/!!'
そして*BSDタール(OSXを含む)という同様のオプションがあります-s
。
tar -xf foo.tar -s '!^/home/mydir/dir1/!!'
POSIXはpax
BSD tar と同じオプションを使用するコマンドです。
pax -r <foo.tar -s '!^/home/mydir/dir1/!!'