Tengo un comando de búsqueda que muestra archivos en mi proyecto:
find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
-a -not -path './coverage*' -a -not -path './bower_components*' \
-a -not -name '*~'
¿Cómo puedo filtrar los archivos para que no muestren los que están en .gitignore?
Pensé que uso:
while read file; do
grep $file .gitignore > /dev/null && echo $file;
done
pero el archivo .gitignore puede tener patrones globales (tampoco funcionará con rutas si el archivo está en .gitignore). ¿Cómo puedo filtrar archivos basados en patrones que pueden tener niveles globales?
find-sh {} +
al final?find-sh
?find /tmp -exec sh -c ': "${non_existed_var:?foo}"' find-sh {} +
por ejemplohay un comando git para hacer exactamente esto: por ejemplo
Como dijiste, hará un grep básico con la mayoría de las opciones grep normales, pero no buscará
.git
ni ninguno de los archivos o carpetas en tu.gitignore
archivo.Para más detalles, ver
man git-grep
Submódulos:
Si tiene otros repositorios de git dentro de este repositorio de git (deben estar en submódulos), también puede usar la bandera
--recurse-submodules
para buscar en los submódulosfuente
Para mostrar los archivos que están en su caja y que Git rastrea, use
Este comando tiene varias opciones para mostrar, por ejemplo, archivos en caché, archivos sin seguimiento, archivos modificados, archivos ignorados, etc. Consulte
git ls-files --help
.fuente
git ls-files
pero no creo que tenga la opción de mostrar archivos sin seguimiento, ¿cuál?-o
(otro). Ej .git ls-files -o -X .gitignore
.gitignore
.git ls-files
generarán ./foo.txt mientras quefind
generarían ./Foo.txtPuede usar una matriz en la que se realizará bash glob.
Tener archivos como este:
Y tener un
ignore
archivo como esteUtilizando
Resultará a esto:
Luego puede usar cualquier técnica para manipular esos datos.
Personalmente prefiero algo como esto:
fuente
gitignore
es superconjunto debash
glob, te perderás por algo como!file*
!file*
? ¿Como un patrón global en ignorar archivo o como un nombre de archivo?gitignore
aceptar el patrón de archivo!file*
para excluir archivos que comienzan confile
, y también doble estrella**
.gitignore
tiene un montón de características, todas las cuales podrían no ser tan fáciles de implementar directamente en Bash: git-scm.com/docs/gitignore . Aunque ignora que consta de sólo simples globos deben ser factible en la llanura Bash, sin awk o tal!
no? Tal vez el gloging extendido pueda manejar esta situación. Sobre doublestar, bash puede manejarloshopt -s globstar
.