J'ai la commande find qui affiche les fichiers dans mon projet:
find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
-a -not -path './coverage*' -a -not -path './bower_components*' \
-a -not -name '*~'
Comment puis-je filtrer les fichiers pour ne pas afficher ceux qui sont dans .gitignore?
J'ai pensé utiliser:
while read file; do
grep $file .gitignore > /dev/null && echo $file;
done
mais le fichier .gitignore peut avoir des modèles glob (également il ne fonctionnera pas avec les chemins si le fichier est en .gitignore), comment puis-je filtrer les fichiers en fonction des modèles qui peuvent avoir des globs?
find-sh {} +
à la fin?find-sh
?find /tmp -exec sh -c ': "${non_existed_var:?foo}"' find-sh {} +
par exempleil y a une commande git pour faire exactement cela: par exemple
Comme vous l'avez dit, il effectuera un grep de base avec la plupart des options normales de grep, mais il ne recherchera
.git
ni les fichiers ni les dossiers de votre.gitignore
fichier.Pour plus de détails, voir
man git-grep
Sous-modules:
Si vous avez d'autres dépôts git à l'intérieur de ce dépôt git (ils devraient être dans des sous-modules), vous pouvez également utiliser l'indicateur
--recurse-submodules
pour rechercher dans les sous-modulesla source
Pour afficher les fichiers qui sont dans votre caisse et qui sont suivis par Git, utilisez
Cette commande a un certain nombre d'options pour afficher, par exemple les fichiers mis en cache, les fichiers non suivis, les fichiers modifiés, les fichiers ignorés, etc. Voir
git ls-files --help
.la source
git ls-files
mais ne pense pas qu'il a la possibilité d'afficher les fichiers non suivis, lequel?-o
(autre). Par exemple,git ls-files -o -X .gitignore
.gitignore
.git ls-files
génèreront ./foo.txt tandisfind
que généreraient ./Foo.txtVous pouvez utiliser un tableau dans lequel bash glob sera effectué.
Avoir des fichiers comme celui-ci:
Et avoir un
ignore
fichier comme celui-ciEn utilisant
En résultera:
Vous pouvez ensuite utiliser n'importe quelle technique pour manipuler ces données.
Personnellement, je préfère quelque chose comme ça:
la source
gitignore
est un surensemble debash
glob, vous allez manquer pour quelque chose comme!file*
!file*
? En tant que modèle global dans un fichier ignoré ou en tant que nom de fichier?gitignore
accepter le modèle de fichier comme!file*
pour exclure les fichiers commencer parfile
, et aussi double étoile**
.gitignore
a un tas de fonctionnalités, qui ne sont pas toutes faciles à implémenter directement dans Bash: git-scm.com/docs/gitignore . Bien que les ignorés constitués de simples globes devraient être réalisables en plaine Bash, sans awk ou autre!
as not? Peut-être que la globalisation étendue peut gérer cette situation. À propos de doublestar, bash peut le gérer avecshopt -s globstar
.