生成文件.tar:扁平化源文件的目录结构



我想收集一些源文件并使用Makefile对它们进行tar。源文件分布如下:

project
│
├── Makefile
│
├── folder(name is arbitrary)
│    │
│    ├── test1.txt
│    ├── test2.txt
│    .
│    .
│    .
│ 
├── source.cpp
│
├── source2.cpp
│
├── source.h
.
.

现在,我想要有一个扁平的tarball文件,它包含了当我在根目录(项目)中调用make时,这个tarball文件根目录下的每个源文件,如下所示:

myTarball.tar.gz
│
├── Makefile
│
├── source.cpp
│
├── source2.cpp
│
├── source.h
│
├── test1.txt
│
├── test2.txt
│
.
.
.

当前的make文件看起来像这样:

FILES=$($(wildcard Makefile *.h *.hpp *.cpp test*.txt */test*.txt))
$(NAME): $(FILES)
COPYFILE_DISABLE=true tar -vczf $(NAME) $(FILES)

我不熟悉makefile和bash,但我尽了最大的努力去玩,做了一些搜索,但一无所获。当前的只能生成像

这样的东西
NAME.tar.gz
│
├── Makefile
│
├── folder
│    │
│    ├── test1.txt
│    ├── test2.txt
│    .
│    .
│    .
│ 
├── source.cpp
│
├── source2.cpp
│
├── source.h
.
.

与文件夹结构。我想我可能会先把文件夹里的所有源文件复制到根目录,然后在tar up后删除它们。有没有更好的方式来优雅地做到这一点?

好吧,你可以这样做,但是如果你使用GNU tar,那么让tar为你做这项工作可能更简单,而不是先将文件复制到一个临时位置。

应该这样做:

$(NAME): $(FILES)
COPYFILE_DISABLE=true tar -vczf $(NAME) --transform='s,.*/,,' $(FILES)

将从生成的tar文件内的文件中删除所有目录。--transform选项请参考手册

相关内容

  • 没有找到相关文章

最新更新