フラットtarアーカイブの作成:フォルダを追加したときにすべての親アイテムを無視する

フラットtarアーカイブの作成:フォルダを追加したときにすべての親アイテムを無視する

新しいtarアーカイブにいくつかのフォルダを(再帰的に)追加したいと思います。すべてのフォルダは、生成されたアーカイブのルートレベルに配置する必要があります。親フォルダなしで、cdそのディレクトリに最初に入り、段階的に追加せずにすべてのフォルダを追加する方法はありますか?

次のディレクトリ構造を考えてみましょう。

.
├── bar
│   ├── bar-file
│   └── barsub
│       └── barsub-file
└── foo
    ├── foo-file
    └── foosub
        └── foosub-file

追加したいバーそしてトミコtar アーカイブへ。

# add folders with different parents
# could be e.g. /some/foo/foosub and /other/bar as well
$ tar cvf archive.tar bar foo/foosub
a bar
a bar/bar-file
a bar/barsub
a bar/barsub/barsub-file
a foo/foosub
a foo/foosub/foosub-file

しかし、私が望むもの

.
├── bar
│   ├── bar-file
│   └── barsub
│       └── barsub-file
└── foosub
    └── foosub-file

そのようなものを簡単に作る方法はありますか?平らなTarファイル?

ベストアンサー1

GNUまたはFreeBSD tarを使用すると、アーカイブにファイルを追加または抽出するときにファイル名を変換できます。

tar czf foo.tgz --transform='!^bar/!!' bar/ foo

移植可能にも同じことができます。公園

pax -w -pe -s'!^bar/!!' foo bar/

おすすめ記事