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に送信)を使用して正しい名前のファイルを生成できます。