commande cp doit ignorer certains fichiers
Parfois j'ai besoin pour effectuer la commande suivante
cp -rv demo demo_bkp
Cependant je veux ignorer tous les fichiers dans le répertoire .git . Comment puis-je y parvenir? Il prend beaucoup de temps à copier .git fichiers et je n'ai pas besoin de ces fichiers.
- Double Possible de Copier le dossier de manière récursive, à l'exclusion de certains dossiers
Vous devez vous connecter pour publier un commentaire.
D'ignorer un répertoire git plus précisément, j'avais essayez de
git exporter
premier.Mais en général, pour copier une arborescence de répertoires à exclure certains fichiers ou dossiers, je vous recommande d'utiliser
rsync
au lieu decp
. La syntaxe est essentiellement le même, maisrsync
a façon plus d'options, y compris un pour exclure les fichiers sélectionnés:Voir, par exemple, la page de man pour plus d'info.
demo
comme un sous-répertoire dedemo_bkp
. Cependant, l'utilisation dersync -rv --exclude=.git demo/ demo_bkp
crée un nouveau répertoire qui contient tous les fichiers à partir du premier répertoire.cp
, tout en excluant git est exactement ce que je cherche! Je ne veux pas utiliser rsync dans mes scripts. Ne serait pas mieux de conseillertar
à la place? stackoverflow.com/a/2193806/2494754tar
à la place (OMI) parce quersync
est une excellente option. Il est spécifiquement conçu pour cette tâche et l'utilisation est plus simple. Si vous ne souhaitez pas utiliserrsync
, je suggère deux choses: (1) Essayez l'une des solutions préconisées dans les autres réponses à cette question. C'est en partie pourquoi il y a de multiples réponses. Ou (2) de publier séparément un suivi de la question demandant comment faire cette copie sans l'aide dersync
, et y compris d'autres contraintes que vous pourriez avoir.OK. Accrochez-vous. Ce n'est pas assez.
Ce qui se passe ici?
find demo | cpio -p demo_bkp
trouve les fichiers correspondant aux critères que vous voulez et utilise la commande cpio pour les copier (soi-disant "pass-through" la mode).find -depth
modifie l'ordre les fichiers sont imprimés dans l'ordre cpio veut.find -name .git -prune
dit ne trouve pas de répéter bas.git
répertoires.find -print0 | cpio -0
a trouver une utilisation NUL caractères (\0
) pour séparer les noms de fichier. C'est pour un maximum de robustesse dans le cas où il y a tout bizarrement nommé des fichiers avec des espaces, retours à la ligne, ou d'autres caractères inhabituels.cpio -d
crée les répertoires nécessaires.cpio -v --quiet
tirages pour chaque nom de fichier tout en omettant le "X blocs copiés" message cpio normalement imprime à la fin.Je pense que cela fera l'affaire:
Trouve d'abord et crée chaque répertoire. Puis détecte et de copies de chaque fichier.
Noter qu'il ne fonctionne pas avec les fichiers spéciaux (liens symboliques, etc).