如何建立指向目錄中所有檔案(檔案類別)的符號連結?

如何建立指向目錄中所有檔案(檔案類別)的符號連結?

我想建立指向某個目錄中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左右的東西,因為這似乎是一項常見任務 - 至少對我來說。

答案1

ln確實需要多個參數,但在這種情況下不要忘記給出目標目錄。

所以,在你的例子中.是目標目錄,所以它應該像

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

man ln;上面的命令使用第三種形式:

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)
  • 在第一種表單中,建立一個指向 TARGET 的鏈接,名稱為 LINK_NAME。
  • 在第二種形式中,在目前目錄中建立指向 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

cpwith-s選項可以建立軟連結(或-l硬連結)。

從目前目錄可以這樣使用:

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

在你的情況下,它將是這樣的:

$ cp -s ../source/*.bar .

相關內容