mv plik bez przerywania dowiązania symbolicznego do tego pliku

24

Czy jest możliwe, aby mvplik bez przerywania dowiązania symbolicznego do tego pliku? Moja początkowa odpowiedź na to pytanie brzmi „nie” i pracuję nad rozwiązaniem opartym na skryptach, aby zmienić linki bezpośrednio po przeprowadzce, ale zastanawiałem się, jak inni podeszli do tego problemu. Ścieżki i nazwy dowiązań symbolicznych są znane z góry, więc teoretycznie wszystko, co muszę zrobić, to:

  1. uzyskać cel linku
  2. cel mv
  3. ponownie utworzyć link do nowego celu
  4. utwórz nowy link do nowego celu (inny niż oryginalny link, który nadal chcę zachować)

W późniejszym terminie:

  1. usuń stary link

1-4 zostaną zawarte w skrypcie bash, ale zastanawiam się, czy ktoś ma bardziej eleganckie podejście, czy wie o wbudowanym lub poleceniu, którego nie jestem świadomy.

Gabe.
źródło
2
Twarde linki nie mają tego problemu. Mają jednak inne wady. :-)
Stéphane Gimenez
3
Tak, nie można używać dowiązań twardych, ponieważ pliki znajdują się w kilku systemach plików.
Gabe.
2
Ponadto: nie można na stałe połączyć z katalogiem.
sampablokuper

Odpowiedzi:

8

Jesteś na dobrej drodze, nie sądzę, że istnieje łatwiejszy sposób niż sekwencja, którą opisujesz.

Kroki 3 i 4 są trochę mylące. Jeśli chcesz przekierować istniejące linki, zachowując tę ​​samą nazwę, możesz użyć ln -fdo zastąpienia istniejących plików. Jeśli chcesz, aby nazwa twoich linków również zmieniła się w celu odzwierciedlenia nowej nazwy docelowej, sekwencja jest poprawna.

Caleb
źródło
1
Heh, tak, po prostu ponownie przeczytaj tę część i teraz też się pomyliłem. Poprawię to, aby miało to większy sens. Dzięki.
Gabe.
Jestem trochę zdezorientowany w użyciu ln -f, ale myślę, że skrypt @fred opublikowany może pomóc wyjaśnić, jak to działa. Co zaskakujące, strona podręcznika nie była zbyt pomocna.
Gabe.
@ gabe. Oryginalna wersja mojej odpowiedzi była poprawna -s -f, ale podczas jej poprawiania „zgubiła” ona -s: źle! Z wikipedii : „ln” bez opcji tworzy twardy link, „ln -f” wymusza twardy link ... więc dzięki za pytanie, to naprawdę potwierdziło dla mnie teraz składnię .. Z pewnością sprawiło, że dwukrotnie sprawdziłem rzeczy ... Wymaga ln -s -f... (
Dokonałem
4

Do twojej sytuacji:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link
Peter.O
źródło
Uwaga: bardziej skomplikowane będzie połączenie linków.
Peter.O,
0

Mam kolejny problem. Znalazłem bardzo dobry motyw ikony o nazwie „Suru ++”

Suru ++ 20 [Oficjalnie wolny od błędów i kompatybilny z 11 DE]

Ale ten motyw ikony wykonany jest w svg all image. Teraz chcę go używać w Fluxboksie i generować pozycje menu, ale jest to możliwe tylko z obrazem ikony png Pobieram do środka wzorzec, które są wszystkimi ikonami w formacie svg, i tak mogę przekonwertować z wiersza poleceń svg do png wszystko ok generuj dla każdego rozmiar folderu jak 16 x 16, 24 x 24 px. Ale w tych folderach znajdują się dowiązania symboliczne do plików SVG:

rozszerzenia svg wewnątrz dowiązań symbolicznych, które chcę zmienić na png

Jeśli istnieje możliwość zmiany rozszerzenia svg na png wewnątrz wszystkich linków symbolix, motyw ikony działałby dobrze w menu Fluxboksa i Menedżerach plików. Zrobiłem entrie na temat tej ikony, używając w Xubuntu, ale w języku hiszpańskim

Boże błogosław

Indacochea Wachín
źródło