Kopiowanie folderu wydaje się trywialne, aż do dnia, gdy katalog zawiera ukryte pliki, dowiązania symboliczne lub daty przydatne dla skryptu. cp -r klonuje strukturę, ale cp -a jest często najlepszym wyborem do duplikacji folderu roboczego bez zmiany jego atrybutów.
Przed usunięciem źródła, utwórz kopię, sprawdź ją i otwórz kilka plików. Udana komenda nie dowodzi, że celowałeś w właściwą ścieżkę.

Wybór między cp -r a cp -a
cp -r wchodzi do podfolderów. Elementy, które zaczynają się od kropki, są również włączane podczas kopiowania samego folderu. Unikaj zatem globbingu w stylu *, jeśli oczekujesz także na ukryte pliki: powłoka ignoruje je domyślnie.
cp -a włącza tryb archiwizacji. Zachowuje jak najwięcej uprawnień, właścicieli, dat, dowiązań symbolicznych i dowiązań fizycznych. W przypadku lokalnej kopii zapasowej lub migracji katalogu, zwykle jest to komenda, którą należy preferować. Może wymagać wysokich uprawnień, jeśli musisz zachować właściciela, którego twoje konto nie może ustawić.
cp -a -- /srv/app/ /srv/app-copie/
W -- oddziela opcje od ścieżek. Zapobiega to interpretacji pliku zaczynającego się od myślnika jako opcji. Ostatni ukośnik źródła oznacza tutaj, że kopiujesz jego zawartość do /srv/app-copie/. Jeżeli ten katalog już istnieje, sprawdź uzyskaną strukturę przed kontynuowaniem.
Przygotowanie celu bez nadpisywania niewłaściwego katalogu
Najpierw utwórz jasno nazwaną destynację, a następnie wypisz obie strony. Na serwerze nie uruchamiaj rekurencyjnej kopii do ścieżki zbudowanej ręcznie w skrypcie, nie pokazując tej ścieżki w logach.
mkdir -p -- /srv/app-copie
find /srv/app -maxdepth 1 -printf '%fn' | sort
find /srv/app-copie -maxdepth 1 -printf '%fn' | sort
Jeśli chcesz odmówić nadpisania podczas pierwszej próby, dodaj -n. Ta opcja ignoruje już istniejące pliki, więc nie nadaje się do pełnej synchronizacji. Aby zastąpić istniejące dane, wykonaj kopię zapasową lub pracuj w nowym katalogu, a następnie przełącz usługę na zatwierdzoną kopię.
Kontrola plików, praw i dowiązań
Zacznij od sprawdzenia ukrytych plików i praw. ls -la wyświetla nazwy zaczynające się od kropki. stat pozwala porównać uprawnienia i daty wrażliwego pliku.
ls -la /srv/app
ls -la /srv/app-copie
stat -c '%n %a %U:%G %y' /srv/app/config.ini /srv/app-copie/config.ini
find /srv/app-copie -type l -ls
Ostatnia komenda wyświetla dowiązania symboliczne. Z cp -a, dowiązanie zwykle pozostaje dowiązaniem. Przy mniej odpowiednim kopiowaniu, możesz skończyć z zawartością jego celu lub dowiązaniem, które stało się nieaktualne po przeniesieniu.
- policz pliki za pomocą
find ... -type f | wc -l; - otwórz najważniejszy plik konfiguracyjny ;
- przetestuj program na kopii przed usunięciem źródła ;
- zachowaj źródło, dopóki usługa lub skrypt nie przejdą testu funkcjonalnego.
Aby porównać zawartość dwóch drzew katalogów, diff -qr /srv/app /srv/app-copie zgłasza pliki, które się różnią. Nie zastępuje to weryfikacji aplikacji, ale szybko wykrywa niekompletną kopię.
Jeśli musisz również poprawić uprawnienia po duplikacji, przewodnik po chmod rekurencyjny w systemie Linux wyjaśnia, dlaczego zbyt szybkie uruchomienie chmod -R może uszkodzić pliki wykonywalne. Aby znaleźć plik przed skopiowaniem, użyj również find w systemie Linux.