web-dev-qa-db-ja.com

Ubuntuでは、2つのフォルダーをunionfsやaufsなしで仮想的にマージする方法はありますか?

不幸な場所に大量のファイルを分散させる変更できないソース管理システムが稼働しています。私のIDEは、これらのフォルダーが単一の統一された場所にあることを期待しています。通常はすべてをシンボリックリンクするだけですが、さらに悪いことに、一部のフォルダーは再帰的にマージする必要があります。重複するファイル名はありませんが、私が手作業で行うよりも多くの数千のファイルについて話しています。

私はunionfsとaufsを調べましたが、それは企業のマシンなので、カーネルをいじる必要はありません(これらのwang chungの「はじめに」のドキュメントは言うまでもありません)。

これを行う別の方法はありますか?

7
Hounshell

使用しているツールとそのシンボリックリンクでの動作はわかりませんが、cp(またはハードリンクの場合は-s)の-lオプションを使用して、シンボリックリンク(または必要に応じてハードリンク)を使用してツリー全体を自動的に「コピー」できます。 。


以下の例を見てみましょう。

。
├──1
│├──s-> x 
│├──x
│├──y
│└──z
│└──1
└──2
├──a
│└──2
├──b
└──c

1/ファイルを現在のディレクトリの2/にシンボリックリンクしたい場合は、次のようにするだけです。

cp -ans "$PWD/1/"* 2/

これで、2/は次のようになります。

。
 ... 
└──2
├──a
│└──2
├── b 
├──c 
├──s-> /home/przemoc/links/1/s
├──x->/home/przemoc/links/1 /x
├──y->/home/przemoc/links/1/y
└──z
└──1->/home/przemoc/links/1/z/1 

使用されたcpオプションの説明:

  • -aまたは--archive
    属性を保持し、ディレクトリを再帰的にリンクおよびコピーします(実際には-dR --preserve=allのエイリアスです)
  • -nまたは--no-clobber
    既存のファイルの上書きを防止します
  • -sまたは--symbolic-link
    リテラルコピーの代わりにシンボリックリンクを作成します

そのような場合、ソースファイルパスは絶対パスである必要があります(そのため、$PWDを使用しました)。これは、cpが「現在のディレクトリでのみ相対シンボリックリンクを作成できる」ためです。

10
przemoc