私が作業しているプロジェクトで特定のファイルセットをシンボリックリンクしようとしています。
各ファイル名に既知の文字列を含むシンボリックリンクが必要です。
これが私が今まで持っているものです:
ln -s find ~/path/to/src/ -name "*stringtomatch*" find ~/path/to/dest
ソースと一致するようにターゲットにディレクトリ構造を設定しましたが、これはディレクトリにすぎないため、空のターゲットのコマンドを作成する方が簡単な場合は、そのディレクトリを削除してもかまいません。
修正する:
今、私は有効な答えを受け入れました、そして同様のユースケースでより簡単に解決策を見つけるためにいくつかのコンテキストを共有したいと思います。
私はほとんどのコーディングをNetbeansで行います。私はプロジェクト用のパッケージを作成するときにファイル名の共通部分を持つようにすべての関連ファイルの名前を付ける傾向があります。これにより、プロジェクトを移動するときにパッケージファイルを簡単に見つけることができます。しかし、現在のプロジェクトでは、関連するファイルとディレクトリの数が多いため、時間がかかります。
今私が持っているのは、基本的なプロジェクト階層を維持しながらそのパッケージのファイルのみを表示する各パッケージに対して定義された別々のプロジェクトです。
メインプロジェクトのパッケージファイルへのシンボリックリンクを使用する別のパッケージプロジェクトを構築することで、私はNetbeans IDEで現在の形式では利用できない完璧なソリューションだと思うソリューションを効果的にしました。
各サブプロジェクトは何もしませんが、それ自体にのみ関連するファイルのサブセットを操作できるようにするので、実際にキーボードの使用時間がより効率的になります。
私はEclipseを持っていませんが、Eclipseにこの機能が組み込まれていると思います。
したがって、トレードオフですが、私はこのNetbeansの解決策が私が今日実装できる最もきれいなソリューションであると信じています。これは大きな利点であり、予想より良くない場合でもうまく機能します。
もともとサブプロジェクトを編集した後、メインプロジェクトの手動同期を実行したかったのです。そうでない場合、マスターはまだ自動的に同期状態を維持します。
ベストアンサー1
find
GNU実装を使用することはxargs
それほど難しくなく、ターゲットの場所に必要なディレクトリをすでに作成している場合:
find ~/path/to/src -name "*stringtomatch*" -printf "%P\0" |
xargs -r0 --replace ln -s ~/path/to/src/'{}' ~/path/to/dest/'{}'
出力には、-printf "%P\0"
ソースディレクトリパラメータへのパスが削除され、nullバイトで終了します。
xargs
find
その後、出力を読みます。
-0
使用するパラメータをnullで区切って表します。
--replace
{}
xargsに引数で置き換えるように指示します(引数ごとに1つのコマンドを実行するという意味でもあります)。
最後に、パラメータを置き換えるコマンドが提供されます。