ディレクトリ内のすべてのファイル(ファイルのクラス)へのシンボリックリンクを作成する方法は?


43

特定のディレクトリ内のln -sすべてのファイル(またはで終わるファイルのクラスなど)へのシンボリックリンク()を作成したいと思います.bar。私はCWDにいるよと言うとタイプがls ../source/*.bar私を与えます

foo.bar
baz.bar

ln -s最終的に解決するパラメータリストをどのように渡すことができますか

ln -s ../source/foo.bar
ln -s ../source/baz.bar

もちろん、bashスクリプトを作成できることは知っxargsていますが、少なくとも私にとっては、それが一般的なタスクのように思われるので、もっと簡単なものを含める必要があります。

回答:


75

ln 複数の引数を取りますが、その場合はターゲットディレクトリを指定することを忘れないでください。

したがって、あなたの例.ではターゲットディレクトリなので、次のように簡単にする必要があります

ln -s ../source/*.bar .

からman ln; 上記のコマンドは3番目の形式を使用します。

ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln [OPTION]... TARGET                  (2nd form)
ln [OPTION]... TARGET... DIRECTORY     (3rd form)
ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
  • 最初のフォームで、LINK_NAMEという名前のTARGETへのリンクを作成します。
  • 2番目のフォームで、現在のディレクトリにTARGETへのリンクを作成します。
  • 3番目と4番目のフォームで、DIRECTORYの各ターゲットへのリンクを作成します。

5
あなたはちょうど私の人生の5分を救ってくれました。そのうちの1人がコメントを残すのに十分な価値があります。:-)
moodboom

ファイルがない場合、これは機能しません*.bar。これは、という名前のリンクを作成しますが"*.bar"、これはあなたが望むものではありません。
ニムロッド

1
@Nimrod:それは本当ですが、代わりにエラーを報告したいことをbashに伝えることができますshopt -s failglob; たとえば、unix.stackexchange.com / a / 216227/33390を参照してください(zshの同等のものはsetopt nomatch、デフォルトでオンになっています)
-mpy

:clapping:nice!
クリスシュミッツ

3

つかいます find

certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;

また、シンボリックリンクには絶対パス(可能な場合)を使用することを忘れないでください。


2
ありがとう、でもfind $certainDir -name "*.bar" -exec ln -s {} \;ね?そして、なぜフルパスを使用する必要がありますか?いくつかの内部リンクがあるディレクトリツリーを移動しても、リンクがそのまま残ることを知っておくと非常に便利です。
ダストロブ

これは、ディレクトリをシンボリックリンクする場所によって異なります。そして、フルパスが良いアイデアである理由を思い出せません。それはハードリンクのためだったかもしれませんが、私はそれを理由で頭に焼き付けました。うーん。
ブラウジング

ありがとう、あなたの答えは素晴らしいです。mpyの答えは質問に対するより簡単な解決策であるため、ポイントは彼/彼女に行きます。できれば両方の答えを受け入れます。
ダストロブ

3

globstar(bash / zshの設定:)を使用して再帰的に試すことができますshopt -s globstar

ls -vs ../**/*.bar .

注:-v詳細のために追加されました。

または、findユーティリティを使用してリストが長すぎる場合:

find .. -name \*.bar -exec ln -vs "{}" dest/ ';'

これにより、にリンクが作成されるdest/.、現在のフォルダーのリンクに変更されます。


2番目は正解です。
ニムロッド

0

cp-sオプション(またはソフトリンクを作成することができます-lハードリンク用)を。

現在のディレクトリから次のように使用できます:

$ cp -s ../path/with/scripts/* .

あなたの場合、次のようになります。

$ cp -s ../source/*.bar .
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.