Jak mogę cp -r
skopiować absolutnie wszystkie pliki i katalogi w katalogu
Wymagania:
- Dołącz ukryte pliki i ukryte katalogi.
- Być jednym poleceniem z flagą zawierającą powyższe.
- W ogóle nie trzeba polegać na dopasowaniu wzorów.
Mój brzydki, ale działający hack to:
cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user
Jak to zrobić w jednym poleceniu bez dopasowania wzorca? Jakiej flagi muszę użyć?
Odpowiedzi:
Nie określaj plików:
(Pamiętaj, że
/home/user
nie może już istnieć, w przeciwnym razie stworzy/home/user/skel
).źródło
/home/user/skel
nie istnieje?-T
(bez celu) poniżej dla poprawnego użycia. (-rT
dla rekurencyjnych)Powiedzmy, że utworzyłeś nowy folder (lub zamierzasz go utworzyć) i chcesz skopiować pliki do niego po utworzeniu folderu
Spowoduje to skopiowanie rekursywnie wszystkich plików / folderów z
/etc/skel
do istniejącego folderu utworzonego w pierwszym wierszu.źródło
.
, takie zachowanie wymagałoby utworzenia już istniejącego katalogu, więc po prostu pomija ten krok..
, aby zmienić to, że musisz użyćshopt -s dotglob
polecenia, aby móc dołączyć te pliki. Tak więc*
domyślnie pytasz o skopiowanie wszystkich plików rekurencyjnie z tego katalogu, który można rozwinąć za pomocą*
(który domyślnie nie obejmuje plików ukrytych). Podczas gdy z drugiej strony.
używasz cp do rekurencyjnego kopiowania wszystkiego z „tego katalogu”.Prawidłowym sposobem na to jest skorzystanie z
-T (--no-target-directory)
opcji i rekurencyjne kopiowanie folderów (bez końcowych ukośników, gwiazdek itp.), Tj .:Spowoduje to skopiowanie zawartości
/etc/skel
do/home/user
(w tym pliki ukryte), tworząc folder/home/user
, jeśli nie istnieje; jednak ta-T
opcja uniemożliwia/etc/skel
skopiowanie zawartości do nowego folderu,/home/user/skel
jeśli folder/home/user
istnieje.źródło
bash
Sam ma dobre rozwiązanie, posiadashell option
, możnacp
,mv
i tak dalej .:i
Powyższe rozwiązanie jest standardem
bash
UWAGA:
źródło
setopt
dla Zsh, na wypadek, gdyby ktokolwiek się zastanawiał.Użyj rsync:
rsync -rtv source_folder/ destination_folder/
źródło
rsync
jest dobry, ale inny wybór:Z głównej pomocy:
źródło
Jeśli katalog źródłowy i docelowy mają tę samą nazwę, nawet jeśli istnieje katalog docelowy, możesz po prostu wpisać:
Spowoduje to skopiowanie katalogu / etc / skel do / home /, w tym ukrytych plików i katalogów.
W końcu możesz skopiować katalog i zmienić jego nazwę w jednym wierszu:
źródło
cp -r /etc/skel /home/user
do zmiany nazwyskel
nauser
...Możesz użyć rsync.
Możesz nawet skopiować przez ssh
Można użyć różnych flag: -a, --archive # archive (-rlptgoD)
Strona podręcznika Rsync
źródło
Najprostszym sposobem jest:
Wyrażenie
{.,}*
obejmuje wszystkie pliki i katalogi (również zaczynające się od kropki).Jeśli nie chcesz używać powyższego wyrażenia, możesz użyć
cp
właściwości, która umożliwia określenie wielu źródeł dla jednego folderu docelowego:źródło
..anything
lub...anything
etc. - stackoverflow.com/a/31438355/2351568 zawiera prawidłowy regex tego problemu. || ale i tak używanieshopt -s dotglob
jest nadal lepszym rozwiązaniem!.
i..
(co jest równoważne z bieżącym i zawierającym go folderem). || ale odpowiedź w linku wyjaśnia to dalej i stanowi rozwiązanie.Zauważ, że istnieje sztuczka z wiersza poleceń (działa przynajmniej w sh , bash i ksh ): Po prostu dodaj przyrostek z katalogu ukośnikiem. Będzie to wlać zawartość z katalogu do do katalogu (jak na ironię, że po raz pierwszy dowiedział się o tej sztuczki przy użyciu rsync ).
Przykład:
źródło
Przyszedłem tu, szukając rozwiązania tego samego problemu w Google, a potem zdałem sobie sprawę, że łatwo jest znaleźć. Zaleta nie zależy od powłoki ani specjalnych narzędzi, które mogą nie zostać zainstalowane.
Próbowałem tej sztuczki z końcowym cięciem, ale to nie działało dla mnie.
źródło
Moje rozwiązanie tego problemu, gdy muszę skopiować wszystkie pliki (w tym
.
pliki) do katalogu docelowego z zachowaniem uprawnień to: (nadpisz, jeśli już istnieje)yes
służy do automatycznego nadpisywania plików docelowych,r
rekurencyjnych,v
pełnych,p
zachowania uprawnień.Zauważ, że ścieżka źródłowa nie kończy się na
/
(więc wszystkie pliki / katalog i. Pliki są kopiowane)Katalog docelowy kończy się wraz z
/
umieszczeniem zawartości folderu źródłowego jako miejsca docelowego jako całości.źródło
Widziałem, że cp nie zawsze kopiuje ukryte pliki i jeśli chcesz komendy, która wydaje się działać we wszystkich dialektach linux / unix, powinieneś spróbować użyć:
źródło
Od wersji co najmniej K3b 2.0.3 pojawia się okienko z pytaniami, które pojawia się po dodaniu katalogu do projektu, które pyta, czy chcesz dołączyć ukryte pliki ... pojawia się również pytanie, które należy zapytać o dołączenie spinki do mankietów. Niezłe rzeczy!
źródło