GNU/Linux >> Linux の 問題 >  >> Linux

ディレクトリをtarしますが、完全な絶対パスをアーカイブに保存しないでください

tar -cjf site1.tar.bz2 -C /var/www/site1 .

上記の例では、tar はディレクトリ /var/www/site1 に変更されます オプション -C /var/www/site1 のため、そのことを行う前に

man tar から :

OTHER OPTIONS

  -C, --directory DIR
       change to directory DIR

オプション -C 動作します。明確にするために、2 つの例を投稿します:

<オール>
  • フル パスなしの tarball の作成:フル パス /home/testuser/workspace/project/application.war 必要なのは project/application.war だけです そう:

    tar -cvf output_filename.tar  -C /home/testuser/workspace project
    

    注:workspace の間にスペースがあります と project; tar はフルパスを project だけに置き換えます .

  • ターゲットパスを変更して tarball を抽出 (デフォルトは . 、つまり現在のディレクトリ)

    tar -xvf output_filename.tar -C /home/deploy/
    

    tar 指定されたパスに基づいて tarball を抽出し、作成パスを保持します。この例では、ファイル application.war /home/deploy/project/application.war に抽出されます .

    /home/deploy :抽出物に記載
    project :tarball の作成時に付与

  • 注 :作成した tarball をターゲット ディレクトリに配置する場合は、tarball 名の前にターゲット パスを追加するだけです。例:

    tar -cvf /path/to/place/output_filename.tar  -C /home/testuser/workspace project
    

    -Cらしい オプション upto tar v2.8.3 は、すべてのプラットフォーム (OS) で一貫して機能しません。 -C オプションはディレクトリをアーカイブに追加すると言われていますが、Mac と Ubuntu では、生成された tar.gz ファイル内に絶対パスのプレフィックスを追加します。

    tar target_path/file.tar.gz -C source_path/source_dir
    

    したがって、一貫性のある堅牢なソリューションは cd です。 source_path (source_dir の親ディレクトリ) に移動し、

    を実行します。
    tar target_path/file.tar.gz source_dir
    

    または

    tar -cf target_path/file.tar.gz source_dir
    

    あなたのスクリプトで。これにより、生成された tar.gz ファイルのディレクトリ構造から絶対パスのプレフィックスが削除されます。


    Linux
    1. Linuxtarコマンド

    2. コアがダンプされましたが、コア ファイルが現在のディレクトリにありませんか?

    3. tar の絶対パスを除外するにはどうすればよいですか?

    1. あるディレクトリに存在し、他のディレクトリには存在しないファイルを見つける

    2. Mac 上のディレクトリの Linux 互換 zip アーカイブを作成する方法

    3. 大規模な TAR の最後のファイルを取得する簡単な方法はありますか?

    1. 絶対/正規/相対パス?

    2. ディレクトリ構造を保持せずにディレクトリを tar するにはどうすればよいですか?

    3. 正規表現を使用して TAR アーカイブからファイルを除外する方法は?