web-dev-qa-db-ja.com

tarで共通のベースフォルダーを作成する方法とフォルダーの名前を変更する方法

私はコンピューター科学者であり、基本的なコマンドに精通したいのですが、UbuntuとLinux環境全体はかなり新しいです。

現時点では、.tarおよび.tar.gzファイルを使用していますが、それらの1つを作成するのに問題があります。

私は次のファイル構造を持っていると仮定しましょう:

./
|-> a
    |-> Release
        |-> [some files]
|-> b
    |-> Release
        |-> [some files]

次のコマンドを使用して、現在tarファイルを作成しています。

tar -cvf ../archive.tar a
tar -rvf ../archive.tar b

今、私のarchive.tarもフォーマットを持っています

archive.tar
|-> a
    |-> Release
        |-> [some files]
|-> b
    |-> Release
        |-> [some files]

次に、上記のファイル構造を前提として、次の3つのアーカイブ構造をどのように実現できますか?

  1. 共通ベースフォルダーを追加する

    archive.tar
    |-> baseFolder
        |-> a
            |-> Release
                |-> [some files]
        |-> b
            |-> Release
                |-> [some files]
    
  2. フォルダーの名前を変更する

    archive.tar
    |-> aChangedFolderName
        |-> Release
            |-> [some files]
    |-> bChangedFolderName
        |-> Release
            |-> [some files]
    
  3. 共通のベースフォルダーを追加し、フォルダーの名前を変更します

    archive.tar
    |-> baseFolder
        |-> aChangedFolderName
            |-> Release
                |-> [some files]
        |-> bChangedFolderName
            |-> Release
                |-> [some files]
    

私にとっては、複数のステップで達成できるかどうかは問題ではありません。少なくともできるといいのですが。そして:#1は私にとって最も重要です。

4
Markus Weninger

次のコマンドで1.を実行できます。

tar cvf archive.tar --transform 's,^,baseFolder/,'  a b

アーカイブには以下が含まれます。

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/b/bar

2.の場合、複数の--transformオプションでtarを実行できます。

tar cvf archive.tar --transform 's,^a,changed_a,' --transform 's,^b,changed_b,'  a b

アーカイブには以下が含まれます。

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 changed_a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 changed_a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 changed_b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 changed_b/bar

3.では、次のように1.と2.を組み合わせることができます。

tar cvf archive.tar --transform 's,^a,changed_a,' --transform 's,^b,changed_b,' --transform 's,^,baseFolder/,' a b

アーカイブには以下が含まれます。

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_b/bar
8
Sylvain Pineau