2

次のように、PHPを介してサーバー上にtarアーカイブを作成しようとしています。

exec('tar -cvf myfile.tar tmp_folder / innerfolder /');

正常に動作しますが、保存されたファイルはtmp_folder / innerfolder /を含むフルパスを保持します。ユーザーのためにオンザフライで作成しているため、ユーザーが抽出中にこのパスを持つことは少し使用できません。私はこのトピックを確認しました-TARでアーカイブしている間にパスを取り除く方法ですが、説明の中で男は例を挙げておらず、私は何をすべきかよくわかりません。

アーカイブ内の「tmp_folder/innerfolder/」部分を保持しない方法でファイルをtarに追加する方法の例を教えてください。

前もって感謝します

4

5 に答える 5

13

-Cオプションを使用してtarを実行します。

tar -C tmp_folder/innerfolder -cvf myfile.tar .
于 2012-09-21T14:39:59.710 に答える
3

あなたはごまかすことができます。

exec('cd /path/to/tmp_folder/ && tar -cvf /path/to/myfile.tar innerfolder/');

これにより、ユーザーがtarballを抽出したときに、内側のフォルダーだけが表示されます。

于 2012-09-21T14:39:25.450 に答える
2

--transformを使用できます

tar -cf files.tar --transform='s,/your/path/,,' /your/path/file1 /your/path/file2
tar -tf files.tar
file1
file2

詳細:http ://www.gnu.org/software/tar/manual/html_section/transform.html

于 2013-07-12T19:08:25.327 に答える
0
tar czf ~/backup.tgz --directory=/path filetotar
于 2012-09-21T14:45:48.337 に答える
0

現在のディレクトリ名を保持したいが、そのフルパスは保持したくない場合は、次のようにしてみてください(tarするディレクトリ内から実行します。bash/ zshを想定しています)。

ORIGDIR=${PWD##*/}
tar -C `dirname $PWD` -cvf ../archive.tar $ORIGDIR

ここにいくつかの詳細があります。最初:

ORIGDIR=${PWD##*/}

..現在のディレクトリ名(つまり、現在のディレクトリの名前)を保存します。次に、tarコマンドで:

-C `dirname $PWD`

.. tarの「作業ディレクトリ」を標準ルート(「/」)からアーカイブするフォルダの親に切り替えます。不思議なことに、-Cスイッチはアーカイブを構築するためのパスにのみ影響し、アーカイブ自体が保存される場所には影響しません。したがって、アーカイブ名の前に「../」を付ける必要があります。そうしないと、tarによってアーカイブが配置されます。コマンドを開始したフォルダー内。最後に、$ ORIGDIRは親ディレクトリーに相対的であるため、$ ORIGDIRとその内容はtarに再帰的にアーカイブされます(ただし、それにつながるパスはありません)。

于 2013-11-01T16:59:34.803 に答える