次のディレクトリ構造があります。
/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=<#>
オプションを使用できます。<#>