tar gz は、別の場所のディレクトリを宛先ディレクトリにコピーします。

tar gz は、別の場所のディレクトリを宛先ディレクトリにコピーします。

次のディレクトリ構造があります。

/home/
  |__dirA/
      |__ dir_to_zip/
          |__ file1.txt
          |__ file2.txt
          |__ ...
  |__dirB/
      |__ dir_to_save_in/
  |__dirC/
      backup_zip_script.sh

backup_zip_script.sh次のコマンド(src)が含まれています。

tar -czvf /home/dirB/dir_to_save_in/backup.tar.gz /home/dirA/dir_to_zip

つまり、ディレクトリを圧縮し~/dirA/dir_to_zip、圧縮されたアーカイブを に保存し~/dirB/dir_to_save_in/、 にあるスクリプトを使用したいと思います~/dirC/

上記のコマンドはtar機能しますが、保存されたアーカイブを解凍すると、完全なディレクトリ構造が作成されます。

/home/
  |__dirA/
      |__ dir_to_zip/
          |__ file1.txt
          |__ file2.txt
          |__ ...

私が望むなら:

dir_to_zip/
  |__ file1.txt
  |__ file2.txt
  |__ ...

ディレクトリを別の場所に圧縮して(完全絶対パスを指定する必要があります)、以前のレベルをすべて圧縮せずにそのディレクトリのみを圧縮するにはどうすればよいですか。

単に...を使用することもできますが、cd /home/dirA/ && tar...他の解決策があるかどうかを確認したいと思います。

答え1

のようにコメント、実装でサポートされている場合は、-C[ターゲットディレクトリに変更]オプションを使用してください。tar

tar -czvf /home/dirB/dir_to_save_in/backup.tar.gz -C /home/dirA dir_to_zip

このオプションは、アーカイブを抽出するときにも使用できます。

tar -xzvf /home/dirB/dir_to_save_in/backup.tar.gz -C /home/dirA

アーカイブの内容を/home/dirA

答え2

ディレクトリ構造が一貫している場合、またはプログラムでこれを行う場合は、抽出する前に削除するファイル名パスの要素数を指定する--strip-components=<#>オプションを使用できます。<#>

関連情報