Comment puis-je copier le contenu d'un dossier dans un autre dossier d'un autre répertoire à l'aide du terminal?

740

J'essaie de copier le contenu d'un dossier dans un autre dossier d'un répertoire différent à l'aide d'un terminal.

Quelqu'un pourrait-il me fournir un exemple de la syntaxe de ligne de commande requise pour atteindre cet objectif?

pandisvezia
la source

Réponses:

1116

Vous pouvez copier le contenu d'un dossier /sourcedans un autre dossier existant /destà l'aide de la commande

cp -a /source/. /dest/

L' -aoption est une option récursive améliorée, qui préserve tous les attributs de fichier et préserve également les liens symboliques.

La .fin du chemin source est une cpsyntaxe spécifique qui permet de copier tous les fichiers et dossiers, y compris ceux cachés.

enzotib
la source
@enzotib J'essaie d'utiliser cette commande pour copier le contenu de "Téléchargements / textext" dans "~ / .config / inkscape / extensions /." En utilisant votre commande, je tape "cp -a / Téléchargements / textext /. /~/.config/inkscape/extensions/." mais cela ne fonctionne pas
Funzies
@Funzies: probablement votre commande devrait être:cp -a ~/Downloads/textext/. ~/.config/inkscape/extensions/
enzotib le
Ajoutez un -pindicateur pour conserver les autorisations de fichier et les horodatages. cp -ap /var/www/original.com/images/. /var/www/new.com/images/
Dylan Valade
3
@DylanValade: -aimplique déjà --preserve=all, c'est plus large que -p = --preserve=mode,ownership,timestamps.
enzotib
1
@BennyNeugebauer: scpest utilisé pour copier sur un réseau (via ssh) et ne chiffre que le canal de communication, pas les fichiers du système de fichiers de destination.
enzotib
129

Une alternative est rsync

rsync -r source/ destination

Les avantages de rsync sont:

  1. Après la synchronisation initiale, seuls les fichiers modifiés ont été copiés.

  2. Vous pouvez l'utiliser sur un réseau, ce qui est pratique pour les fichiers de $ HOME, notamment les fichiers de configuration.

Panthère
la source
5
Je pense que vous n'avez pas besoin de l'astérisque. rsync -r source/ destinationdevrait être suffisant, non?
Joschua
1
Celui-ci est plus approprié: 'rsync -rtvp source / * destination'
shridutt kothari le
-r ne fonctionne pas pour les fichiers / dossiers cachés
Nam G VU
1
Cela ne copiera pas les fichiers cachés, car bash ne développe * que dans un fichier non caché. La solution de @Joschua est plus sûre.
Sauerburger
rsync copiera tout le répertoire, y compris les fichiers cachés, si vous utilisez le caractère de fin / sans *, ainsi, il est rync source/ destévident que les utilisateurs devront personnaliser la commande rsync pour fonctionner à leur guise.
Panthère
78

Disons que vous avez un dossier appelé folder1 dans votre dossier. Dans folder1~ , il y a 1 fichier nommé file1 et 2 dossiers appelés sub1 et sub2, chacun contenant d'autres fichiers et dossiers.

Pour copier tout le contenu de ~/folder1la ~/new_folder1vous utiliseriez

cp -r ~/folder1/. ~/new_folder1

new_folder1contiendrait alors tous les fichiers et dossiers de folder1.

cpest la commande à copier à l'aide d'un terminal, le -rrend récursif (ainsi, le répertoire en cours + les autres répertoires à l'intérieur du répertoire en cours) ~/folder1est le dossier d'origine, ~/new_folder1le dossier de destination des fichiers / dossiers à l'intérieur de l'origine.

Bruno Pereira
la source
5
il ne récupère pas les fichiers cachés
Portablejim
1
Merci Bruno! Cela m'a aidé à comprendre la syntaxe, même si je devais la modifier un peu (en supprimant le signe ~). Peut-être parce que le dossier de destination était dans / opt, qui réside dans un autre système de fichiers. Et merci à Portablejim de vous rappeler le dossier caché!
Pandisvezia
4
La période de fuite est importante. Sans cela, il peut parfois créer un nouveau sous-répertoire ~/new_folder1/folder1au lieu de copier le contenu.
Wisbucky
1
Pourquoi pascp -r ~/folder1/* ~/new_folder1
Alex78191
@ Alex78191[root@ home]# mkdir food [root@ home]# cd food/ [root@ food]# mkdir .fruit [root@ food]# mkdir veggies [root@ food]# touch veggies/carrots [root@ food]# touch .fruit/apple [root@ food]# ls * carrots [root@ food]#
Bruno Pereira le
14

Consultez cette http://www.cyberciti.biz/faq/copy-folder-linux-command-line/ pour plus d'informations sur la copie d'un dossier. J'espère que cela t'aides.

cp Command

cpest une commande Linux pour copier des fichiers et des répertoires. La syntaxe est la suivante:

cp source destination
cp dir1 dir2
cp -option  source destination
cp -option1 -option2  source destination

Dans cet exemple, copiez le /home/vivek/lettersdossier et tous ses fichiers dans le /usb/backuprépertoire:

cp -avr /home/vivek/letters /usb/backup

Où,

-a : Conserve les attributs spécifiés, tels que le mode répertoire, le type de fichier, la propriété, les horodatages, si possible des attributs supplémentaires: contexte, liens, xattr, tous.

-v : Expliquez ce qui se fait.

-r: Copier les répertoires de manière récursive. Exemple

Copiez un dossier appelé / tmp / conf dans / tmp / backup:

$ cp -avr /tmp/conf/ /tmp/backup
Dilip Rajkumar
la source
3
Ce n'est pas ce que la question demande.
AStopher
(L'utilisation de -r avec -a est redondante; sur gnu, cp -a est identique à "-dr --preserve = all")
cristoper
1
cp: les options -R et -r ne peuvent pas être spécifiées ensemble.
IgorGanapolsky
4

Exemple simple.

Copiez le répertoire dir_1 et son contenu (_files_) dans le répertoire dir_2 :

cp -r ./dir_1 ./dir_2
# or
cp -r ./dir_1/ ./dir_2/
# Results in: ./dir_2/dir_1/_files_

Copiez le contenu (_files_) uniquement de dir_1 dans le répertoire dir_2 :

cp -r ./dir_1/. ./dir_2
# or
cp -r ./dir_1/. ./dir_2/
# Results in: ./dir_2/_files_*

_files_ est un espace réservé pour les fichiers réels situés dans le répertoire.

Karl Morrison
la source
2

S'il y a deux dossiers: (avec permission d'écriture)

drwxr-xr-x 4 vimal vimal  4096 Sep  9 12:17 .
drwxr-xr-x 3 root  root   4096 Aug 18 14:35 ..
drwxrwxrwx 6 vimal vimal  4096 Sep  9 12:15 DATA
drwxrwxrwx 7 vimal vimal  4096 Sep  9 12:15 PORTAL

Si vous êtes dans le dossier appelé PORTAL où vous voulez copier tout le contenu d’un autre dossier, dites DATA au même niveau, alors vous ferez

vimal@vimal-D3H:/var/www/html/PORTAL$ cp -a ../DATA/. .

Vous devez noter 2 points. Le dernier point dit copier ici dans le présent dossier

et

un suivant / DATA /. indique que tout le contenu du dossier DATA doit être copié, et non le dossier DATA lui-même.

Si vous supprimez ce "." à partir de / DATA /

alors tout le dossier DATA sera copié dans PORTAL (à partir de l'endroit où vous vous en sortez).

Vimal Krishna
la source