%20%E3%81%B8%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%20%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
あるディレクトリ内のln -s
すべてのファイル(または で終わるファイルクラス)へのシンボリックリンク( )を作成したいと思います。cwdで次のように入力すると、.bar
ls ../source/*.bar
foo.bar
baz.bar
ln -s
最終的に解決されるパラメータリストを渡すにはどうすればよいですか
ln -s ../source/foo.bar
ln -s ../source/baz.bar
xargs
もちろん、bash スクリプトを作成できることはわかっていますが、少なくとも私にとっては一般的なタスクであるため、またはそれに関連するより単純なものがあるはずです。
答え1
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へのリンクを作成します。
答え2
globstar (bash/zsh は次のように設定しますshopt -s globstar
) を使用して再帰的に試すことができます。
ls -vs ../**/*.bar .
注:-v
詳細のために追加されました。
または、リストが長すぎる場合は、find
ユーティリティを使用します。
find .. -name \*.bar -exec ln -vs "{}" dest/ ';'
これにより、 にリンクが作成されるdest/
か、.
現在のフォルダーの が に変更されます。
答え3
使用find
certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;
また、忘れずにフルパス(可能な場合) シンボリックリンクを使用します。
答え4
cp
オプションを使用すると-s
ソフトリンク(または-l
ハードリンク)を作成できます。
現在のディレクトリからは次のように使用できます:
$ cp -s ../path/with/scripts/* .
あなたの場合は次のようになります:
$ cp -s ../source/*.bar .