Przesyłam dane, stary system plików opiera się głęboko na katalogu, który jest teraz na innej ścieżce. To jest katalog git, który przechowuje kod online. Nie mam prawa go przenosić ani zmieniać jego nazwy.
Mogę więc zsynchronizować ten katalog z tą samą starą ścieżką. Ale nazwa katalogu również się zmieniła.
Czy istnieje prosty sposób, aby zsynchronizować katalog z katalogiem docelowym o innej nazwie?
src
katalogu wdest
katalogursync
której kiedykolwiek korzystałem. Jeśli tak się dzieje, brakuje ci ukośnika na końcu argumentu katalogu źródłowego.dest
jest to symlnksrc
, zamiast tego kończy się kopiowaniesrc
dosrc/src
. Testowane na macOS. Liczyłem, że mogę wymienićbar -> foo/
zbar/
, ale musiałem użyć pośredniego katalogu tymczasowego.dest
jest to dowiązanie symbolicznesrc
, wystarczyrm dest
uruchomić powyższe polecenie.rsync
jest wystarczająco inteligentny, aby utworzyćdest
przed skopiowaniem zawartościsrc
. Nie potrzebujesz pośredniej temp. Reż.Jeśli stary i nowy system plików są dostępne dla twojego komputera, rozważ użycie dowiązania symbolicznego zamiast rsync. Jeśli używane polecenie rsync nie określa hostów (lub jeśli są one tym samym hostem), dzieje się tak. Próbujesz wykonać kopię lustrzaną dwóch katalogów o innej nazwie na tym samym hoście. Nie używaj do tego rsync, ponieważ kopiujesz dane i będziesz musiał często uruchamiać rsync, aby zachować synchronizację.
Użycie dowiązania symbolicznego jest jednorazową poprawką, która będzie odzwierciedlać dwa katalogi (o różnych nazwach) i nie wymaga prawie żadnego miejsca. To jak tworzenie katalogu aliasu, który wskazuje na inny katalog.
Załóżmy, że miałeś starego gita w katalogu o nazwie / old / path / old_git, a teraz repozytorium kodu zostało przeniesione do / new / path / new_git
Możesz to zrobić:
Spowoduje to utworzenie takiego linku:
/ old / path / old_git -> / new / path / new_git
Tak więc wszystko, co zostanie wprowadzone do new_git, będzie natychmiast dostępne również w stary sposób, bez powielania danych i bez konieczności ciągłej synchronizacji.
źródło
Znajduję teraz alternatywne rozwiązanie.
Za pomocą
rysnc -r /origin/* /target/
można zsynchronizować całą zawartość z katalogu źródłowego do katalogu docelowego.źródło
rsync -r $(find /origin -maxdepth 1 -type f) /target/
. Jak wskazał @RayBurgemeestre, rozszerzenie globu powłoki nie będzie zawierać plików kropek.