Commande Linux pour supprimer tous les fichiers sauf le dossier .git?

Je souhaite supprimer tout le contenu du répertoire actuel, à l’ exception du dossier .git/ avant de copier les nouveaux fichiers dans la twig.

Qu’est-ce que la commande linux pour cela?

Avec l’option find et prune.

 find . -path ./.git -prune -o -exec rm -rf {} \; 2> /dev/null 

Edit: Pour deux répertoires .git et dist

 find . -path ./.git -prune -o \( \! -path ./dist \) -exec rm -rf {} \; 2> /dev/null 

Réinitialiser l’index est bon marché, donc

 git rm -rf . git clean -fxd 

Vous pouvez ensuite réinitialiser l’index (avec git reset ) ou aller directement sur une nouvelle twig.

Comme Crayon l’a mentionné dans les commentaires, la solution la plus simple serait de déplacer le fichier .git hors du répertoire, de tout supprimer, puis de le réinstaller. Mais si vous voulez le faire de façon élégante, find :

 find -not -path "./.git/*" -not -name ".git" | grep git find -not -path "./.git/*" -not -name ".git" -delete 

La première ligne que j’y ai mise car avec find , je veux toujours vérifier pour s’assurer qu’elle trouve ce que je pense, avant de -delete .

Edit: Avait un moment braindead, n’a pas simplement copié de mon terminal.

Edit2: Ajout de -not -not -name ".git" , qui l’empêche d’essayer de supprimer le répertoire .git et supprime les erreurs. Selon l’ordre de find tentatives de suppression d’éléments risquent d’échouer sur des répertoires non vides.

L’une des méthodes consiste à utiliser rm -rf * , ce qui supprime tous les fichiers du dossier, à l’exception des fichiers dotfiles et des dossiers de fichiers comme .git . Vous pouvez alors supprimer les fichiers dotfolders et les dotfolders un par un, de sorte que vous ne manquiez pas les fichiers dot importants comme .gitignore , .gitatsortingbutes plus tard.

Une autre approche serait de déplacer votre dossier .git hors du répertoire, puis de revenir en arrière et de supprimer tout le contenu du dossier et de déplacer le dossier .git .

 mv .git/ ../ cd .. rm -rf folder/* mv .git/ folder/ cd folder 
 for i in `ls | grep -v ".git"` ; do rm -rf $i; done; rm .gitignore; 

le rm supplémentaire à la fin supprimera le .gitignore spécial. Supprimez cela si vous avez besoin du fichier.

devrait trouver tous les fichiers et répertoires avec le nom .git

 find . -name .git 

devrait trouver tous les fichiers et répertoires non nommés .git

 find . -not -name .git 

supprimer tous les fichiers que vous trouvez

 find . -not -name .git -exec rm -vf {} \; 

assurez-vous que la trouvaille fait ce que vous voulez

Si vous souhaitez supprimer des répertoires, remplacez la commande rm par rm -rvf l’option v pour afficher les fichiers supprimés.

si vous voulez vous assurer des fichiers avant de les supprimer, dirigez la commande find vers un fichier et examinez les résultats