tarを使用したハードリンクファイルの抽出

tarを使用したハードリンクファイルの抽出

tarフォルダ内のすべてのファイルのリストを取得し、ファイルをダウンロードできるリンクを含むページにすべて表示しようとしています。個々のファイルをクリックするとダウンロードされます。ハードリンクされたファイルを除いて、すべてうまく機能します。

単一ファイルの抽出に使用するコマンドは次のとおりです。

tar --extract --file=abc.tar.xz abc.file

ただし、ファイルがハードリンクの場合、エラーが発生します。ハードリンクファイルを取得する方法はありますか?

ベストアンサー1

問題はtarがファイルを保存する方法です。例えば

$ echo hello > a
$ ln a b
$ tar cf foo.tar a b
$ tar tf foo.tar
a
b

1つのファイルだけを抽出しようとすると問題が発生します

$ mkdir Y
$ cd Y
$ tar xvf ../foo.tar b
b
tar: b: Cannot hard link to `a': No such file or directory
tar: Exiting with failure status due to previous errors

あなたがすべきことは、詳細なコンテンツリストの表示を見ることです

$ tar tvf foo.tar 
-rw-r--r-- sweh/sweh         6 2016-06-13 10:43 a
hrw-r--r-- sweh/sweh         0 2016-06-13 10:43 b link to a

ここで、「b」の長さがゼロで、「h」(最初の文字)タイプであり、「linked to」とマークされていることがわかります。これにより、抽出する必要がある実際のファイルが何であるかがわかります。

tar Oxvf ../foo.tar a > bこの場合、「O」オプション(stdoutに送信)を使用して正しい名前のファイルを生成できます。

おすすめ記事