Mam folder SOURCE, który zawiera kilka folderów podrzędnych, każdy z własnymi plikami.
Chcę skopiować ten folder do nowego folderu KOPIUJ, w którym muszę skopiować strukturę katalogów, ale zachowaj pliki jako symboliczne łącza do oryginalnych plików w ŹRÓDŁU i jego podfolderach.
Odpowiedzi:
Oto rozwiązanie dotyczące niewbudowanego systemu Linux i Cygwin:
Zauważ, że ŹRÓDŁO musi być ścieżką bezwzględną i ukośnikiem. Jeśli chcesz podać ścieżkę względną, możesz użyć
źródło
SOURCE
jest ścieżką względną, to tak myślę. Spróbuj, a jeśli to nie zadziała, sugeruję, aby zadać nowe pytanie. Odwołaj się do niego za wszelką cenę.Istnieją co najmniej 2 standardowe narzędzia do budowy drzewa katalogów cień istniejącego drzewa, więc nie trzeba tutaj pisać kodu.
Najpierw jest
lndir(1)
zxutils-dev
paczki. Wykorzystuje dowiązania symboliczne do plików. Ze strony podręcznika:Być może lepszą alternatywą jest po prostu użycie
cp
właściwych opcji, jak sugeruje zaakceptowana odpowiedź. Podam tylko kilka przydatnych informacji:Jeśli nie zależy Ci na zachowaniu wszystkich atrybutów (własności / uprawnień, czasów), zamień
a
opcję (równoważną-dr --preserve=all
) nar
(tylko rekurencyjne):źródło
lndir
jest również dostępny tutaj jako skrypt powłoki na wypadek, gdyby nie został zainstalowany: opensource.apple.com/source/X11/X11-0.46.4/lndir.sh?txtMożesz wypróbować kilka takich poleceń wyszukiwania:
źródło
Coś takiego zrobi to, czego potrzebujesz.
Katalogi są tworzone w docelowym drzewie KOPIOWANIA. Cała reszta jest połączona symbolicznie z powrotem do absolutnej ścieżki w drzewie SOURCE. Upewnij się, że zarówno ŹRÓDŁO, jak i KOPIA są określone jako ścieżki bezwzględne (zaczynając od
/
).Jeśli masz duże drzewo do skopiowania i potrzebujesz raportu postępu dla poszczególnych katalogów, możesz dodać go
echo "$ITEM" >&2;
tuż przedmkdir
poleceniem.(I spojrzał
cp
icpio
ale nie wydaje się mieć opcję linkami do źródła z linków symbolicznych).źródło
{ mkdir -p "$COPY/$ITEM"; continue; }
ksh
skryptu ... ale wygląda na to, że jest to również koniecznebash
. NaprawianieJeśli w ŹRÓDŁO nie ma pustych katalogów, które należy skopiować
źródło
cp
, dlaczego niecp -as
?Zacznę od wyrwania perla:
File::Find
jest przydatnym modułem, który pozwala uruchomić określoną podprogram na dowolnym pliku w drzewie katalogów. W takim przypadku podrzędny sprawdza, czy jest to katalog - a jeśli tak, robi plikmkdir
lub plik - w takim przypadku robi dowiązanie symboliczne.źródło
Wygląda na to, że szukasz czegoś takiego jak narzędzie
rsnapshot
; tworzy kopie dowolnych katalogów i w miarę możliwości używa twardych łączy. (Zajrzyj na stronę podręcznika, aby sprawdzić, czy to pasuje.)źródło