Saya ingin membuat tautan simbolik ( ln -s
) ke semua file (atau kelas file, misalnya diakhiri dengan .bar
) di direktori tertentu. Katakanlah saya di cwd dan ketik ls ../source/*.bar
memberi saya
foo.bar
baz.bar
bagaimana saya bisa melewati daftar parameter ln -s
yang akhirnya diputuskan untuk
ln -s ../source/foo.bar
ln -s ../source/baz.bar
Tentu saja saya tahu saya bisa menulis skrip bash, tetapi harus ada sesuatu yang lebih sederhana karena melibatkan xargs
tugas yang umum - setidaknya untuk saya.
linux
bash
symbolic-link
dastrobu
sumber
sumber
*.bar
. Ini akan membuat tautan dengan nama"*.bar"
, yang bukan yang Anda inginkan.shopt -s failglob
; lihat misalnya unix.stackexchange.com/a/216227/33390 (Setara dalam zsh adalahsetopt nomatch
, yang dihidupkan secara default)Menggunakan
find
Juga, ingatlah untuk menggunakan jalur lengkap (jika mungkin) dengan symlink.
sumber
find $certainDir -name "*.bar" -exec ln -s {} \;
? Dan mengapa saya harus menggunakan jalur penuh? Saya merasa cukup nyaman untuk mengetahui bahwa tautan tetap utuh ketika saya memindahkan pohon direktori di sekitar yang memiliki beberapa tautan internal.Anda dapat mencoba secara rekursif dengan menggunakan globstar (bash / zsh ditetapkan oleh:)
shopt -s globstar
:Catatan: Ditambahkan
-v
untuk verbose.Atau jika daftar terlalu panjang, gunakan
find
utilitas:Ini akan membuat tautan
dest/
, atau mengubahnya ke.
untuk folder saat ini.sumber
cp
dengan-s
opsi dapat membuat tautan lunak (atau-l
untuk tautan keras).Dari direktori saat ini dapat dengan digunakan seperti ini:
Dalam kasus Anda, akan seperti ini:
sumber