ディレクトリ内のすべてのファイル (ファイルのクラス) へのシンボリック リンクを作成するにはどうすればよいですか?

ディレクトリ内のすべてのファイル (ファイルのクラス) へのシンボリック リンクを作成するにはどうすればよいですか?

あるディレクトリ内のln -sすべてのファイル(または で終わるファイルクラス)へのシンボリックリンク( )を作成したいと思います。cwdで次のように入力すると、.barls ../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 .

関連情報