comment copier un répertoire et son contenu dans un nouvel emplacement sous un nouveau nom de répertoire?


53

Je suis nouveau sur la ligne de commande Linux et j'essaie de comprendre la commande copy pour le moment.

Quelqu'un peut-il me dire s'il est possible de copier un répertoire avec ses sous-répertoires et les fichiers associés dans un nouveau répertoire portant un nouveau nom, par exemple, directory_backup?

Merci pour toute aide à l'avance

Réponses:


71

Vous utilisez -r(copie récursive) et spécifiez le nouveau nom

cp -r /path/to/directory /path/to/location/new-name

remplacez par les chemins réels ... par exemple pour copier stuffde mon répertoire de base dans un répertoire existantbackup et nommez le nouveau répertoire stuff-backup(si ce répertoire existe déjà, notez qu'il stuffsera copié dans celui-ci et ne l'écrasera pas).

cp -r ~/stuff ~/backup/stuff-backup

~est un raccourci pour votre répertoire personnel /home/$USERou /home/zannadans mon cas. Vous pouvez l'omettre si le répertoire de travail actuel est votre répertoire personnel. Vous pouvez le voir à partir de votre invite.

zanna@monster:~$
              ^--the ~ here is where I am - home!

Vous pouvez ajouter le -vdrapeau détaillé pour rendre cpcompte chaque copie effectuée ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...

Désolé Zanna. Je vais mettre vos conseils en pratique et voir comment je vais. J'aime l'idée du drapeau verbeux. supposons que cela fonctionne également comme un rapport pendant que les autres commandes sont en cours d’exécution. À la vôtre.
Edmuntu

@ Edmuntu désolé pour quoi? Oui, beaucoup de commandes ont un -vou --verbosedrapeau :)
Zanna

désolé pour la courte initiale "merci" .... appuyez sur la touche Retour en erreur.
Edmuntu

10

La commande dont vous avez besoin est simplement cpce qui signifie "copier".

Vous pouvez l'utiliser par exemple avec l'une des syntaxes suivantes:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

La première variante vous permet de spécifier un nouveau nom de fichier pour le fichier cible, tandis que la seconde variante en crée une copie avec le même nom dans le répertoire cible. Vous devez bien sûr remplacer les remplaçants en lettres majuscules par des chemins valides en premier.

Cependant, cppar défaut, il ne fonctionne que sur les fichiers, pas sur les répertoires. Pour lui permettre de copier un répertoire complet avec tout son contenu de manière récursive, vous devez ajouter l' -roption:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Vous pouvez en apprendre plus sur la cpcommande en tapant man cpvotre terminal.


Non utilisé dans cette section de commentaire Byte Commander ... continuez à appuyer sur return to change line mais publiez plutôt. Schéma très clair dans votre réponse. Réjouissez-vous de trier ces répertoires maintenant que j'ai reçu des instructions judicieuses sur l'utilisation correcte des outils disponibles. Excellent.
Edmuntu

@ Edmuntu À l'avenir, utilisez les touches SHIFT + ENTRÉE lorsque vous commentez pour descendre une ligne.
TheOdd

@OwenHines Seulement ces commentaires suppriment les sauts de ligne et les espaces, et leur affichage dans l'éditeur ne change rien au résultat.
Byte Commander

@ByteCommander Oh oui, tant pis. Eh bien, maintenant il sait.
TheOdd

6

En guise d'alternative à la commande cp généralement utile, vous pouvez utiliser rsync qui présente l'avantage supplémentaire de répliquer les autorisations / horodatages de la structure de répertoire d'origine:

rsync -av dir/ newdir

-a archive -v verbose

notez la barre oblique après le répertoire source.


5

Je trouve qu'il est plus facile de passer au répertoire que je copie en premier. Pour cet exemple, passez à un répertoire que tout le monde a appelé /boot. Tout le monde peut copier et coller les commandes ci-dessous dans son terminal.

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

Pour la cpcommande, le répertoire en cours est identifié comme .étant le /bootrépertoire dans lequel nous avons changé. L' -roption rend récursif l'inclusion de tous les sous-répertoires.

Pour s'assurer que cela fonctionne, exécutez la duliste de tous les sous-répertoires et de la taille totale des fichiers dans le nouveau répertoire /boot_backupdans ce cas.

Une fois cette visite guidée terminée, utilisez: sudo rm -r /boot_backuppour supprimer le nouveau répertoire et ses sous-répertoires.


1
Bien que cela explique comment copier tous les fichiers de votre répertoire actuel vers un autre répertoire, il ne répond pas pleinement à la question des opérateurs sur la copie d'un répertoire (et de son contenu) sous un autre nom, dir. Il existe des commandes plus courtes (telles que cp -r) qui créeront un nouveau répertoire et y
copieront

1
Cela explique comment copier un répertoire et son contenu - la différence est que le répertoire source est d'abord modifié par mesure de précaution. cp -rcomme vous le recommandez est déjà sur la troisième ligne de commande. Le tutoriel est basé sur le fait que tout le monde a un /bootrépertoire et peut l’essayer sur sa propre machine. Si j'avais utilisé les cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backuplecteurs ne pourraient pas copier et coller dans leur terminal - ils auraient du changement GroundZerocréant plus de travail et de chances d'erreur. J'espère que vous apprécierez le baiser de cette réponse avec un tutoriel intégré.
WinEunuuchs2Unix

1
@GroundZero faisant cd ~/Documents/SomeObsucreFolder/2016/Nov/définir le répertoire en cours comme répertoire source modifiera l'invite du terminal pour s'assurer qu'il est orthographié correctement, puis son utilisation en cp -r .tant que source évite de ressaisir le répertoire source. C'est simplement ce que je considère comme une bonne habitude. En outre , une fois le changement dans le répertoire source , il est facile à faire ls FIleName1, ls FileName2etc. pour les fichiers que vous origine assurent à sauvegarder sont là sans avoir à répéter le nom du répertoire source pour la lscommande.
WinEunuuchs2Unix

5

Vous pouvez utiliser la commande ci-dessous pour copier le répertoire d'un emplacement vers un autre sous-répertoire.

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

Explication de commande:

  • -R = copier les répertoires de manière récursive
  • v = expliquer ce qui se fait
  • p = Cela vous aidera à conserver votre permission et votre propriété avec des horodatages

Merci @Rakesh Chauhan. "Conservez votre permission et votre propriété avec des horodatages" ??? Wow .... j'ai besoin d'y aller !!!! Encore un autre aspect des commandes de ligne à explorer. Merci pour votre réponse.
Edmuntu

4

cpest la commande qui remplit la fonction que vous recherchez. Cela signifie copie et c'est exactement ce que vous faites. La commande qui fonctionnerait pour vous dans cette situation est

cp -R source/ destination/

Cela copierait le source/dossier et tous ses sous-répertoires dans destination/.

Si destination/n'existe pas, il sera créé.

L' -Rindicateur signifie récursif, ce qui indique cpde copier tous les sous-répertoires.


Merci @ Owen Hines. Cela ressemble certainement à la commande pour ma tâche.Cheers
Edmuntu

1
@ Edmuntu Heureux de pouvoir vous aider, si vous trouviez la solution à votre problème, pouvez-vous marquer la réponse qui vous convient comme la bonne en cliquant sur la coche en dessous? Cela aidera à alerter les autres utilisateurs qui consultent la page de la question en cours de résolution.
TheOdd

1

Vous souhaitez généralement conserver les autorisations de fichier identiques lors de la copie, et non un nouvel ensemble d'autorisations de création par défaut. Cela signifie utiliser -a flag pour cp.

cp -a file filenew
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.