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

Hoe kopieer ik met cp om verborgen bestanden en verborgen directories en hun inhoud op te nemen?

Hoe kan ik cp -r kopieëren absoluut alle bestanden en directories in een directory

Vereisten:

  • Verborgen bestanden en verborgen directories opnemen.
  • Wees één enkel commando met een vlag om het bovenstaande op te nemen.
  • Hoe kan ik dit allemaal in één commando doen zonder de patroonherkenning? Welke vlag moet ik gebruiken?

Antwoorden (14)

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

Laten we zeggen dat je de nieuwe map hebt aangemaakt (of gaat aanmaken) en dat je de bestanden er naartoe wilt kopiëren nadat de map

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

is aangemaakt Dit zal alle bestanden/map recursief kopiëren van /etc/skel in de reeds bestaande map die op de eerste regel is aangemaakt.

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

Geef de bestanden niet op:

cp -r /etc/skel /home/user

(Merk op dat /home/user niet al mag bestaan, anders maakt het /home/user/skel aan).

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

De juiste manier om dit te doen is door de -T (--no-target-directory) optie te gebruiken, en de mappen recursief te kopiëren (zonder sleepstreepjes, sterretjes, etc.), d.w.z.:

cp -rT /etc/skel /home/user

Dit zal de inhoud van /etc/skel naar /home/user kopiëren (inclusief verborgen bestanden), waardoor de map /home/user wordt aangemaakt als deze niet bestaat; de -T optie voorkomt echter dat de inhoud van /etc/skel wordt gekopieerd naar een nieuwe map /home/user/skel als de map /home/user wel bestaat.

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

bash zelf heeft een goede oplossing, het heeft een shell option, U kunt cp, mv etc.:

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

en

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

Bovenstaande oplossing is standaard van bash

*NOTE: *

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

Gebruik rsync:

rsync -rtv source_folder/ destination_folder/

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

rsync is goed, maar een andere keuze:

cp -a src/ dst/

Uit de belangrijkste hulp:

-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

De eenvoudigste manier is:

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

De expressie {.,}* omvat alle bestanden en directories (ook beginnend met een punt).

Als je geen gebruik wilt maken van bovenstaande expressie, dan kun je de eigenschap cp gebruiken, wat de mogelijkheid is om meerdere bronnen te specificeren voor één doelmap:

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

Je zou rsync.

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

kunnen gebruiken Je kunt zelfs over ssh

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

kopiëren Er zijn verschillende vlaggen die je kunt gebruiken: -a, –archief # archief (-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.

Rsync man pagina

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

Als uw bron- en doelmap dezelfde naam hebben, zelfs als de doelmap bestaat, kunt u eenvoudigweg typen:

cp -R /etc/skel /home/

Dit zal de /etc/skel map kopiëren naar /home/, inclusief verborgen bestanden en mappen.

Uiteindelijk kunt u de map kopiëren en hernoemen in een enkele regel :

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

Ik kwam hier met Googled voor een oplossing voor hetzelfde probleem, toen realiseerde ik me dat het gemakkelijk te doen is met vinden. Het voordeel is dat het niet afhankelijk is van de schil, of speciale voorzieningen die niet geïnstalleerd mogen worden.

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

Ik probeerde de truc met een schuine streep uit te voeren, maar dat werkte niet voor mij.

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

Mijn oplossing voor dit probleem als ik alle bestanden (inclusief .-bestanden) naar een doelmap** moet kopiëren die de rechten** bevat, is: (overschrijven als het al bestaat)

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

yes is voor het automatisch overschrijven van doelbestanden, r recursief, v verbose, p behouden rechten.

Merk op dat het bronpad niet eindigt met een / (dus alle bestanden/directory en . bestanden worden gekopieerd)

Bestemmingsmap eindigt met / aangezien we de inhoud van de bronmap naar de bestemming als geheel plaatsen.

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

Merk op dat er een commando-regel truc is (werkt in ieder geval in sh, bash en ksh): Voeg gewoon de from directory toe met een schuine streep. Dit giet de inhoud van de from directory in de to directory (ironisch genoeg had ik deze truc voor het eerst geleerd bij het gebruiken van _rsync).

Voorbeeld:

/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

Ik heb gezien dat cp niet altijd verborgen bestanden kopieert en als je een commando wilt dat over alle linux/unix-dialecten heen lijkt te werken, moet je het proberen met:

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

Vanaf tenminste K3b 2.0.3 is er een vraagbox die opduikt wanneer de map aan het project wordt toegevoegd, die vraagt of u verborgen bestanden wilt opnemen… er is ook een vraag die opduikt over het opnemen van links. Leuk spul!