2009-10-27 19:46:06 +0000 2009-10-27 19:46:06 +0000
423
423

Jak skopiować za pomocą cp, aby dołączyć ukryte pliki i ukryte katalogi oraz ich zawartość?

Jak zrobić kopię cp -r absolutnie wszystkie plików i katalogów w katalogu

Wymagania:

  • Dołącz ukryte pliki i ukryte katalogi.
  • Bądź jedną komendą z flagą, aby dołączyć powyższe.
  • Nie musisz w ogóle polegać na dopasowaniu wzorca.

Mój brzydki, ale działający, hack to:

cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user

Jak mogę zrobić to wszystko w jednym poleceniu bez dopasowania wzorca? Jakiej flagi muszę użyć?

Odpowiedzi (14)

492
492
492
2011-12-12 22:00:01 +0000

Powiedzmy, że utworzyłeś nowy folder (lub zamierzasz go utworzyć) i chcesz skopiować do niego pliki po utworzeniu folderu

mkdir /home/<new_user>
cp -r /etc/skel/. /home/<new_user>

To spowoduje skopiowanie wszystkich plików/folderów rekurencyjnie z /etc/skel do już istniejącego folderu utworzonego w pierwszej linii.

281
281
281
2009-10-27 19:55:27 +0000

Nie określaj plików:

cp -r /etc/skel /home/user

(Zauważ, że /home/user nie może już istnieć, w przeciwnym razie utworzy /home/user/skel).

95
95
95
2015-09-08 21:50:45 +0000

Prawidłowym sposobem jest skorzystanie z opcji -T (--no-target-directory) i rekurencyjne kopiowanie folderów (bez ukośników, gwiazdek itp.), tj.:

cp -rT /etc/skel /home/user

Skopiuje zawartość /etc/skel do /home/user (łącznie z plikami ukrytymi), tworząc folder /home/user, jeśli nie istnieje; jednak opcja -T zapobiega skopiowaniu zawartości /etc/skel do nowego folderu /home/user/skel, jeśli folder /home/user istnieje.

68
68
68
2013-02-06 01:14:47 +0000

bash itself has a good solution, it has a shell option, You can cp, mv and so on:

shopt -s dotglob # for considering dot files (turn on dot files)

and shopt -u dotglob # for don't considering dot files (turn off dot files)

Above solution is standard of bash

NOTE:

shopt # without argument show status of all shell options
-u # abbrivation of unset 
-s # abbrivation of set
29
29
29
2014-02-20 13:18:25 +0000

Użyj rsync:

rsync -rtv source_folder/ destination_folder/

7
7
7
2014-08-28 17:46:19 +0000

rsync jest dobry, ale inny wybór:

cp -a src/ dst/

Z głównej pomocy:

-a, --archive
          same as -dR --preserve=all

   -d same as --no-dereference --preserve=links

   -R, -r, --recursive
          copy directories recursively
5
5
5
2018-06-06 16:13:41 +0000

Najprostszy sposób to:

cp -r /etc/skel/{.,}* /home/user

Wyrażenie {.,}* zawiera 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ć właściwości cp, która jest możliwością określenia wielu źródeł dla jednego docelowego folderu:

cp -r /etc/skel/* /etc/skel/.* /home/user
4
4
4
2016-01-17 17:32:26 +0000

Możesz użyć rsync.

rsync -aP ./from/dir/ /some/other/directory/

Możesz nawet skopiować nad ssh

rsync -aP ./from/dir/ username@remotehost:/some/other/directory/

Istnieją różne flagi, których możesz użyć: -a, –archive # archive (-rlptgoD)

-r, --recursive
-l, --links # copy symlinks as links
-p, --perms # preserve permissions
-t, --times # preserve times
-g, --group # preserve group
-o, --owner # preserve owner
-D # --devices --specials

--delete # Delete extra files

You may want to add the -P option to your command.

--partial # By default, rsync will delete any partially transferred file if the transfer is interrupted. In some circumstances it is more desirable to keep partially transferred files. Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster.

-P # The -P option is equivalent to --partial --progress. Its purpose is to make it much easier to specify these two options for a long transfer that may be interrupted.

strona man rsync

4
4
4
2013-05-16 08:38:46 +0000

Jeśli Twój katalog źródłowy i docelowy mają tę samą nazwę, nawet jeśli istnieje katalog docelowy, możesz po prostu wpisać:

cp -R /etc/skel /home/

To skopiuje katalog /etc/skel do /home/, włączając w to ukryte pliki i katalogi.

Ostatecznie, możesz skopiować katalog i zmienić jego nazwę w jednej linii :

cp -R /etc/skel /home/ && mv /home/skel /home/user
3
3
3
2015-07-24 13:34:27 +0000

Przyszedłem tu po rozwiązanie tego samego problemu, a potem zdałem sobie sprawę, że łatwo jest go znaleźć. Zaletą nie jest to, że nie zależy to od powłoki, czy specjalnych narzędzi, które mogą nie być zainstalowane.

find /etc/skel/ -mindepth 1 -exec cp -r {} /home/username/ \;

Próbowałem sztuczki z trailing slash, ale to nie zadziałało dla mnie.

2
2
2
2018-01-30 20:42:49 +0000

Moim rozwiązaniem tego problemu, gdy muszę skopiować wszystkie pliki (w tym pliki .) do katalogu docelowego zezwolenia jest: (nadpisz jeśli już istnieje)

yes | cp -rvp /source/directory /destination/directory/

yes jest dla automatycznego nadpisywania plików docelowych, r rekurencyjny, v verbose, p zachowuje uprawnienia.

Zauważ, że ścieżka źródłowa nie kończy się na / (więc wszystkie pliki/katalogi i . pliki są kopiowane)

Katalog docelowy kończy się na / ponieważ umieszczamy zawartość folderu źródłowego do miejsca docelowego jako całość.

2
2
2
2015-05-12 20:00:58 +0000

Zauważ, że istnieje sztuczka z linią poleceń (działa co najmniej w sh, bash i ksh): Po prostu dodaj ukośnik do from katalogu. To wleje zawartość katalogu from do katalogu to (jak na ironię, pierwszy raz dowiedziałem się o tej sztuczce, kiedy using rsync).

Przykład:

/tmp$ mkdir test_dir1
/tmp$ cd test_dir1/
/tmp/test_dir1$ touch aa
/tmp/test_dir1$ touch .bb
/tmp/test_dir1$ cd ..
/tmp$ mkdir test_dir2

/tmp$ cp -r test_dir1/* test_dir2
/tmp$ ls -1a test_dir2
.
..
aa

/tmp$ cp -r test_dir1/ test_dir2
/tmp$ ls -1a test_dir2
.
..
.bb
aa
1
1
1
2019-02-13 10:18:49 +0000

Widziałem, że cp nie zawsze kopiuje ukryte pliki i jeśli chciałbyś komendę, która wydaje się działać we wszystkich dialektach linuksowych/uniksowych powinieneś spróbować użyć:

cd /etc/skel
find | cpio -pdumv /home/user
-2
-2
-2
2016-12-14 21:57:06 +0000

Od co najmniej K3b 2.0.3, po dodaniu katalogu do projektu pojawia się okienko z pytaniem, czy chcesz dołączyć ukryte pliki… pojawia się również pytanie, które wyskakuje, aby zapytać o dodanie linków. Fajne rzeczy!