Jak zastąpić dowiązanie symboliczne kopią pliku, do którego prowadzi łącze?

15

Posiadając dowiązanie symboliczne (pojedyncze, bez przetwarzania wsadowego systemu plików), jaki wiersz poleceń należy zastosować, aby zastąpić go kopią pliku, do którego prowadzi łącze?

Ivan
źródło

Odpowiedzi:

16
cp --remove-destination "$(readlink <symlink>)" <symlink>
Ignacio Vazquez-Abrams
źródło
1
error "-bash: błąd składni w pobliżu nieoczekiwanego tokena` newline '", gdy jest wykonywany ze środowiska Debiana.
Lin Song Yang,
Jeśli <symlink>jest dowiązaniem symbolicznym do ścieżki względnej, działa to tylko wtedy, gdy <symlink>znajduje się w bieżącym katalogu. Możesz użyć readlink -f. Lub jeśli używasz zsh:cp --remove-destination path/to/symlink(:A) path/to/symlink
Stéphane Chazelas
0

Mógłbyś:

file=path/to/symlink
{ rm -f -- "$file" && cat > "$file"; } < "$file"

(który kopiuje tylko treść, a nie metadane pliku, takie jak uprawnienia i własność).

Stéphane Chazelas
źródło