Comment copier des fichiers cachés et des sous-répertoires cachés (ceux commençant par un point) dans le dossier A vers le dossier B? Par exemple, si j'ai cette structure:
A/a
A/b
A/.a
A/.b/
A/.b/somefile
A/.b/.c
Je voudrais copier sur B uniquement les fichiers cachés et les sous-répertoires cachés dans A:
B/.a
B/.b/
B/.b/somefile
B/.b/.c
J'ai déjà essayé cette commande: à cp A/.* B
partir de cette autre question de superutilisateur . Cependant, il ne copie pas les sous-répertoires. A également essayé cp -r A/.* B
, mais il copie .
donc je termine avec une copie exacte de A (y compris les fichiers normaux). Toute aide est appréciée.
la source
..c
..*[^.]
mais vous perdriez alors les fichiers qui se terminent par un.
. Je pense que vous auriez en effet besoin d'un regroupement étendu pour vraiment tenir compte de tous les cas.Le problème
A/.*
est qu'il y a le répertoire.
dansA
lequel correspond également le modèle.Vous pouvez activer les modèles glob étendus et utiliser les éléments suivants:
Il correspond aux fichiers dont le nom commence par un point et dont le deuxième caractère n'est ni un point ni rien (? (.) Ne correspond à rien ou à un point,! (...) le nie, c'est-à-dire! (? (.)) Correspond à tout le reste que rien ou un point).
la source
.!(@(|.))
(AFAICT) équivaut à ce qui précède, (IMNSHO) un peu plus clair et un seul caractère de plus.Pour des cas comme celui-ci, nous recommandons d'utiliser
find
au lieu decp
comme ceci:La syntaxe de base se décompose comme ceci:
find A/ -type f
:find
éléments du répertoireA/
dont le type est un fichier (au lieu d'un répertoire)…-maxdepth 1 -name '.*'
: Pour cela pour unmaxdepth
des 1 répertoires et dontname
commence par.
.-exec cp -p {} B/ \;
: Et une fois ces fichiers trouvés,exec
lacp
commande avec un-p
drapeau pour conserver les dates / heures de la source ({}
) à la destination deB/
.J'aime utiliser
maxdepth
pour ajouter une couche de contrôle, donc je ne copie pas accidentellement un système de fichiers entier. Mais n'hésitez pas à supprimer cela.la source
find A -type d
fournit une liste récursive dans A avec seulement des répertoiresgrep -E "\."
filtre les répertoires avec un point (ie: répertoires cachés)cp -r
copier récursivementJ'ai créé la structure des fichiers et des dossiers pour A et exécuté la commande dans Git Bash (je ne suis pas avec Linux pour le moment) et cela a fonctionné.
la source
A B
, puis il agirait de manière inattendue car il se développeraitcp -r A B/.dotfile B
. Le conseil général est de ne pas analyserfind
ouls
produire du tout. Si vous utilisez,find
vous devez également utiliser ses propres options pour filtrer plutôt quegrep
, et si vous dirigez lafind
sortie ailleurs, utilisez-print0
ou appelez directement la commande souhaitée. Voir lefind
manuel .extglob
d'être définis).find
analyse.Comme alternative, vous pouvez utiliser cette autre commande si le deuxième caractère est alphanumérique ( source ):
la source
.@foo
ou..c
.