Comment faire pour cp -r
copier absolument tous les fichiers et répertoires d'un répertoire
Exigences:
- Inclure les fichiers cachés et les répertoires cachés.
- Soyez une seule commande avec un drapeau pour inclure ce qui précède.
- Pas besoin de compter sur la correspondance de modèle du tout.
Mon hack, mais qui travaille, c'est:
cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user
Comment puis-je faire tout cela en une seule commande sans correspondance de modèle? Quel drapeau dois-je utiliser?
Réponses:
Ne spécifiez pas les fichiers:
(Notez que cela
/home/user
ne doit pas déjà exister, sinon cela va créer/home/user/skel
.)la source
/home/user/skel
-T
(pas de cible) comme indiqué ci-dessous pour une utilisation correcte. (-rT
pour récursif)Disons que vous avez créé le nouveau dossier (ou allez en créer un) et que vous souhaitez y copier les fichiers une fois le dossier créé.
Cela copiera tous les fichiers / dossiers de manière récursive de
/etc/skel
dans le dossier existant déjà créé sur la première ligne.la source
.
, ce comportement nécessiterait la création d'un répertoire déjà existant. Il ignore donc cette étape..
, pour changer, vous devez utiliser lashopt -s dotglob
commande avant de pouvoir inclure ces fichiers. Donc, avec*
, par défaut, vous demandez de copier tous les fichiers de ce répertoire qui peuvent être développés de manière récursive*
(qui n'inclut pas les fichiers cachés par défaut). De l’autre côté,.
vous utilisez cp pour copier récursivement tout ce qui se trouve dans "ce répertoire".Pour ce faire, utilisez l'
-T (--no-target-directory)
option et copiez les dossiers de manière récursive (sans les barres obliques, astérisques, etc.), c'est-à-dire:Cela copiera le contenu de
/etc/skel
dans/home/user
(y compris les fichiers cachés), créant le dossier/home/user
s'il n'existe pas; Toutefois, cette-T
option empêche la/etc/skel
copie du contenu de dans un nouveau dossier/home/user/skel
si celui-ci/home/user
existe.la source
bash
lui-même a une bonne solution, il a unshell option
, vous pouvezcp
,mv
et ainsi de suite .:et
La solution ci-dessus est standard
bash
REMARQUE:
la source
setopt
pour zsh, au cas où quelqu'un d'autre se le demanderait.Utilisez rsync:
rsync -rtv source_folder/ destination_folder/
la source
rsync
c'est bien, mais un autre choix:De l'aide principale:
la source
Si votre répertoire source et votre répertoire cible ont le même nom, même s'il existe, vous pouvez simplement taper:
Cela copiera le répertoire / etc / skel dans / home /, y compris les fichiers et répertoires cachés.
Vous pouvez éventuellement copier le répertoire et le renommer en une seule ligne:
la source
cp -r /etc/skel /home/user
pour renommerskel
enuser
...Vous pouvez utiliser rsync.
Vous pouvez même copier sur ssh
Vous pouvez utiliser différents indicateurs: -a, --archive # archive (-rlptgoD)
Page de manuel de Rsync
la source
Le moyen le plus simple est:
L'expression
{.,}*
inclut tous les fichiers et répertoires (commençant également par un point).Si vous ne souhaitez pas utiliser l'expression ci-dessus, vous pouvez utiliser la
cp
propriété, qui permet de spécifier plusieurs sources pour un dossier cible:la source
..anything
ou...anything
etc. - stackoverflow.com/a/31438355/2351568 contient la regex correcte pour ce problème. || mais quand même utilisershopt -s dotglob
est toujours la meilleure solution!.
et..
qui est équivalent au dossier courant et à son dossier). || mais toujours la réponse dans le lien l' explique plus loin et fournit une solution.Notez qu'il existe une astuce en ligne de commande (fonctionne dans, au moins, sh , bash et ksh ): il suffit de suffixer le répertoire from avec une barre oblique. Cela verser le contenu du du répertoire dans le au répertoire (ironiquement, j'avais d' abord appris cette astuce lorsque l' utilisation rsync ).
Exemple:
la source
Je suis venu ici avec Google pour trouver une solution au même problème, puis je me suis rendu compte que c'est facile à faire avec find. L'avantage est qu'il ne dépend pas du shell ou des utilitaires spéciaux qui peuvent ne pas être installés.
J'ai essayé le truc avec slash de fuite, mais cela n'a pas fonctionné pour moi.
la source
Ma solution à ce problème lorsque je dois copier tous les fichiers (y compris les
.
fichiers) dans un répertoire cible en conservant les autorisations est la suivante: (écraser si déjà existant)yes
est destiné à écraser automatiquement les fichiers de destination,r
récursif,v
détaillé,p
conserver les autorisations.Notez que le chemin source ne se termine pas par un
/
(donc tous les fichiers / répertoire et fichiers. Sont copiés)Le répertoire de destination se termine par la
/
place du contenu du dossier source dans la destination.la source
J'ai vu que cp ne copie pas toujours les fichiers cachés et si vous souhaitez une commande qui semble fonctionner avec tous les dialectes linux / unix, vous devriez essayer d'utiliser:
la source
À partir de K3b 2.0.3 au moins, une boîte de questions apparaît lorsque le répertoire est ajouté au projet, et vous demande si vous souhaitez inclure des fichiers cachés. Une autre question apparaît également, à savoir: liens. Jolies choses!
la source