Chciałbym utworzyć dowiązania symboliczne ( ln -s
) do wszystkich plików (lub klasy plików, np. Kończących się na .bar
) w określonym katalogu. Powiedz, że jestem w cwd, a typ ls ../source/*.bar
daje mi
foo.bar
baz.bar
jak mogę przekazać listę parametrów, do ln -s
której ostatecznie się rozwiązuje
ln -s ../source/foo.bar
ln -s ../source/baz.bar
Oczywiście wiem, że mogę napisać skrypt bash, ale powinno być coś prostszego xargs
, ponieważ wydaje się to powszechnym zadaniem - przynajmniej dla mnie.
linux
bash
symbolic-link
dastrobu
źródło
źródło
*.bar
. Stworzy link z nazwą"*.bar"
, która nie jest tym, czego chcesz.shopt -s failglob
; patrz np. unix.stackexchange.com/a/216227/33390 (Odpowiednikiem w zsh jestsetopt nomatch
, który jest domyślnie włączony)Posługiwać się
find
Pamiętaj również, aby używać pełnych ścieżek (tam, gdzie to możliwe) z dowiązaniami symbolicznymi.
źródło
find $certainDir -name "*.bar" -exec ln -s {} \;
? I dlaczego powinienem używać pełnych ścieżek? Uważam, że całkiem wygodnie jest wiedzieć, że linki pozostają nienaruszone, gdy poruszam drzewem katalogów, które mają jakieś wewnętrzne linki.Możesz spróbować rekurencyjnie za pomocą globstar (bash / zsh ustawiane przez:)
shopt -s globstar
:Uwaga: Dodano
-v
dla pełnych.Lub jeśli lista jest za długa, używając
find
narzędzia:Spowoduje to utworzenie łączy
dest/
lub zmianę.
na bieżący folder.źródło
cp
z-s
opcją można utworzyć miękkie linki (lub-l
twarde linki).Z bieżącego katalogu można użyć w następujący sposób:
W twoim przypadku będzie tak:
źródło