609 votes

Comment copier avec cp pour inclure les fichiers et répertoires cachés et leur contenu ?

Comment puis-je faire cp -r copie absolument tout des fichiers et répertoires d'un répertoire

Exigences :

  • Inclure les fichiers cachés et les répertoires cachés.
  • Soyez une commande unique avec un drapeau pour inclure ce qui précède.
  • Il n'est pas du tout nécessaire de s'appuyer sur la correspondance des modèles.

Mon hack moche, mais qui fonctionne, est :

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

Comment puis-je faire tout cela en une seule commande sans la correspondance des motifs ? Quel drapeau dois-je utiliser ?

1 votes

Plus de réponses ici, bien qu'elles n'aient pas l'air aussi bonnes ; serverfault.com/questions/3154/

2 votes

S'il vous plaît, Eleven81, envisagez de changer la réponse acceptée pour celle donnée par @bruno pereira, car elle évite de créer un nouveau dossier. Sinon, que ce commentaire soit un avertissement aux nouveaux lecteurs de vérifier également l'autre réponse (la plus votée). Tx.

0 votes

Et si vous couriez shopt -u dotglob pour inclure les fichiers cachés, puis exécutez cp -rfv /etc/skel /home/user qui vous montrera également la progression dans le cas où vous copiez un grand répertoire.

3voto

Dustin Oprea Points 331

Notez qu'il existe une astuce en ligne de commande (qui fonctionne dans, au moins, sh , bash y ksh ) : Il suffit de suffixer le de avec une barre oblique. Ceci versera le contenu du répertoire de dans le répertoire a (ironiquement, j'avais appris cette astuce pour la première fois quand en utilisant rsync ).

Exemple :

/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

2voto

Rajneesh Gadge Points 21

Ma solution pour ce problème lorsque je dois copier tous les fichiers (y compris . ) vers un répertoire cible conserver les autorisations est : (écraser s'il existe déjà)

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

yes sert à écraser automatiquement les fichiers de destination, r récursif, v verbeux, p conserver les autorisations.

Notez que le le chemin source ne se termine pas par un / (ainsi tous les fichiers/répertoire et fichiers . sont copiés)

Le répertoire de destination se termine par / car nous plaçons le contenu du dossier source vers la destination comme un tout.

1voto

Mikael Nyborg Points 11

J'ai vu que cp ne copiait pas toujours les fichiers cachés et si vous souhaitez une commande qui semble fonctionner dans tous les dialectes linux/unix, vous devriez essayer d'utiliser :

cd /etc/skel
find | cpio -pdumv /home/user

-2voto

user1098490 Points 101

Pour copier des fichiers, des répertoires et des fichiers cachés d'un répertoire vers un répertoire existant ou nouveau :

cp -a /etc/skel /home/user

Copie dans le répertoire courant :

cp -a /etc/skel/. .

-3voto

Fred James Points 1

Depuis au moins K3b 2.0.3, il y a une boîte de question qui apparaît lorsque le répertoire est ajouté au projet, qui demande si vous voulez inclure les fichiers cachés ... il y a aussi une question qui apparaît pour demander si vous voulez inclure les liens. Bien joué !

0 votes

"une boîte de questions qui s'affiche" - pour une commande Shell (CLI) ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X