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á
.gitni ninguno de los archivos o carpetas en tu.gitignorearchivo.Para más detalles, ver
man git-grepSubmó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-submodulespara 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-filespero 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-filesgenerarán ./foo.txt mientras quefindgenerarían ./Foo.txtPuede usar una matriz en la que se realizará bash glob.
Tener archivos como este:
Y tener un
ignorearchivo como esteUtilizando
Resultará a esto:
Luego puede usar cualquier técnica para manipular esos datos.
Personalmente prefiero algo como esto:
fuente
gitignorees superconjunto debashglob, te perderás por algo como!file*!file*? ¿Como un patrón global en ignorar archivo o como un nombre de archivo?gitignoreaceptar el patrón de archivo!file*para excluir archivos que comienzan confile, y también doble estrella**.gitignoretiene 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.