特定のディレクトリにあるすべてのファイル(または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
などを含むもっと単純なものがあるはずです - 少なくとも私にとってはそれは一般的なタスクのようです。
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)
- 1番目のフォームで、LINK_NAMEという名前のTARGETへのリンクを作成します。
- 2番目の形式では、現在のディレクトリにTARGETへのリンクを作成します。
- 3番目と4番目の形式では、DIRECTORYに各TARGETへのリンクを作成します。
find
を使う
certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;
また、シンボリックリンクではフルパス(可能な場合)を使用することを忘れないでください。
Globstar(bash/zsh:shopt -s globstar
で設定)を使って再帰的に試すことができます。
ls -vs ../**/*.bar .
注:冗長のために-v
を追加しました。
リストが長すぎる場合は、find
ユーティリティを使用します。
find .. -name \*.bar -exec ln -vs "{}" dest/ ';'
これはdest/
にリンクを作成するか、現在のフォルダの場合は.
に変更します。
cp
オプションと-s
オプションを組み合わせると、ソフトリンクを作成できます(ハードリンクの場合は-l
)。
現在のディレクトリからこのように使用することができます:
$ cp -s ../path/with/scripts/* .
あなたの場合、それはこのようになるでしょう:
$ cp -s ../source/*.bar .