Chcę stworzyć klon struktury naszego wieloterabajtowego serwera plików. Wiem, że cp --parents może przenieść plik i jego strukturę nadrzędną, ale czy istnieje sposób, aby skopiować strukturę katalogów w stanie nienaruszonym?
Chcę skopiować do systemu Linux, a nasz serwer plików jest tam zamontowany w CIFS.
Odpowiedzi:
Możesz zrobić coś takiego:
aby utworzyć listę katalogów, a następnie
aby utworzyć katalogi w miejscu docelowym.
źródło
find . -type d -print0 >dirs.txt
ixargs -0 mkdir -p <dirs.txt
. Spowoduje to, że oba polecenia będą używać wartości null jako separatorów zamiast białych znaków.xargs
może przekroczyć maksymalną długość polecenia systemu, gdy zaczynasz zajmować się zamówieniami liczącymi setki lub tysiące, więc używaj tego ostrożnie. (Znajdź limit długości polecenia za pomocągetconf ARG_MAX
.) W przypadku wielu katalogów może być konieczne napisanie skryptu, który będzie przechodził przez wyjście.źródło
rsync
rozwiązanie z odpowiedzi Chen Levy w tym pytaniu SO--
jest standardowym terminatorem opcji narzędziowych GNU. Oznacza "hej mkdir, każdy argument po tym, to nie jest flaga, więc traktuj go jako argument plikowy, nawet jeśli zaczyna się od znaku '-'."Oto proste rozwiązanie wykorzystujące rsync:
Tam znalazłem to rozwiązanie
źródło
rsync -a --include '*/' --exclude '*' "$source" "$target"
Nie wiem, czy szukasz rozwiązania w systemie Linux. Jeśli tak, możesz spróbować tego:
źródło
Spowoduje to skopiowanie katalogów i atrybutów plików, ale nie danych plików:
Następnie możesz usunąć atrybuty plików, jeśli nie jesteś nimi zainteresowany:
źródło
Następujące rozwiązanie sprawdziło się u mnie w różnych środowiskach:
źródło
To działa:
Po prostu zastąp SOURCE_DIR i DEST_DIR.
źródło
To rozwiązuje nawet problem z białymi znakami:
W oryginale / źródłowym reż .:
następnie odtwórz go w nowo utworzonym katalogu:
źródło
Zastąp
target_dir
isource_dir
odpowiednimi wartościami:Przetestowano na OSX + Ubuntu.
źródło
Skrypt w języku Python napisany przez Sergiy Kolodyazhnyy opublikowany na: Kopiować tylko foldery, a nie pliki? :
lub z muszli:
FYI:
źródło
Innym podejściem jest użycie
tree
bardzo poręcznego i nawigowanie po drzewach katalogów w oparciu o jego mocne opcje. Dostępne są opcje tylko dla katalogu, wyklucz puste katalogi, wyklucz nazwy ze wzorcem, uwzględnij tylko nazwy ze wzorcem itp. Sprawdźman tree
Zaleta : możesz edytować lub przeglądać listę lub jeśli wykonujesz dużo skryptów i często tworzysz zestaw pustych katalogów
Podejście : utwórz listę katalogów używając
tree
, użyj tej listy jako argumentów wejściowychmkdir
-dfi
wyświetla tylko katalogi, wyświetla pełną ścieżkę dla każdej nazwy, sprawia, że drzewo nie wypisuje linii wcięć,--noreport
Pomija drukowanie raportu o pliku i katalogu na końcu listy drzewa, aby plik wyjściowy nie zawierał żadnych kłaczkówNastępnie przejdź do miejsca docelowego, w którym chcesz puste katalogi i wykonaj
źródło
Kopiuj katalog tylko z powiązanymi uprawnieniami i własnością
źródło
Rozwiązanie 1-liniowe:
źródło
Jeśli możesz uzyskać dostęp z komputera z systemem Windows, możesz użyć xcopy z / T i / E, aby skopiować tylko strukturę folderów (/ E zawiera puste foldery)
http://ss64.com/nt/xcopy.html
[EDYTOWAĆ!]
Ten używa rsync do odtworzenia struktury katalogów, ale bez plików. http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
Właściwie może być lepiej :)
źródło
Oto rozwiązanie w PHP, które:
Utwórz plik podobny
syncDirs.php
do tej zawartości:Uruchom go jako użytkownik, który ma wystarczające uprawnienia:
sudo php syncDirs.php /var/source /var/destination
źródło