管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

ディレクトリ構造を含めずにtarで固める方法

ディレクトリ構造を含めずにtarで固める方法の備忘です。
まとめ:

tar cvjf <圧縮ファイルのファイル名> -C <圧縮ファイルの起点となるパス> <圧縮対象のファイル名>

実行環境

[root@4765cb7f88ce work]# cat /etc/*release
Rocky Linux release 8.8 (Green Obsidian)

[root@4765cb7f88ce work]# tar --version
tar (GNU tar) 1.30
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.

実行方法

# ディレクトリ階層
[root@4765cb7f88ce work]# tree
.
└── dir_a
    └── dir_b
        └── test.txt

2 directories, 1 file

# 前提: /work/dir_a/dir_b/text.txtを、ディレクトリ階層を含めずに「text.txt.tar.bz2」として圧縮したい

# ★うまくいくパターン
# dir_bを基準パスに指定
[root@4765cb7f88ce dir_b]# echo $PWD
/work/dir_a/dir_b

# dir_bで以下のコマンドを実行する
[root@4765cb7f88ce dir_b]# tar cvjf test.txt.tar.bz2 test.txt
test.txt

# test.txt.tar.bz2の中身を表示-> ディレクトリ階層が含まれない(期待通りの動作)
[root@4765cb7f88ce dir_b]# tar jtvf test.txt.tar.bz2 
-rw-r--r-- root/root        10 2023-09-21 16:52 test.txt

# ★うまくいかないパターン
# /workを基準パスに指定
[root@4765cb7f88ce work]# echo $PWD
/work

# /workで以下のコマンドを実行する
[root@4765cb7f88ce work]# tar cvjf test.txt.tar.bz2 /work/dir_a/dir_b/test.txt
tar: Removing leading '/' from member names
/work/dir_a/dir_b/test.txt

# test.txt.tar.bz2の中身を表示 -> ディレクトリ階層が含まれる
[root@4765cb7f88ce work]# tar jtvf test.txt.tar.bz2 
-rw-r--r-- root/root        10 2023-09-21 16:52 work/dir_a/dir_b/test.txt

# ★基準パスに依存せず期待通りの動作をさせる方法
# /workを基準パスに指定
[root@4765cb7f88ce work]# echo $PWD
/work

# /workで以下のコマンドを実行する
# -C <圧縮ファイルの起点となるパス> <ファイル名>と指定
[root@4765cb7f88ce work]# tar cvjf test.txt.tar.bz2 -C /work/dir_a/dir_b test.txt
test.txt

# test.txt.tar.bz2の中身を表示-> ディレクトリ階層が含まれない(期待通りの動作)
[root@4765cb7f88ce work]# tar jtvf test.txt.tar.bz2 
-rw-r--r-- root/root        10 2023-09-21 16:52 test.txt