Как вывести список только каталогов, которые не находятся в подкаталоге каталога `.git`?

Я хочу перечислить только те каталоги, которые не находятся внутри каталога .git / на мой текущий путь.

Я пробую следующее:

find . -path "**/.git" -prune -o -print -type d

Каталоги .git исключены, но фрагмент также содержит список файлов. Но этого не должно быть, как я указал -тип d . Как заставить утилиту find вести себя так, как я описал?

0
25.02.2016, 14:40
2 ответа

Вы использовали -print до -type d , поэтому find print все не устраивало первое выражение.

Вы хотите поменять местами их:

find . -path '*/.git' -prune -o -type d -print

или использовать только предикат, поэтому вы можете опустить -print :

find . ! \( -path '*/.git' -o -path '*/.git/*' \) -type d

Также обратите внимание, что вам нужно использовать только одну звездочку * /. Git , двойная звездочка ** не имеет особого значения для поиска сопоставления с образцом. И вы можете сделать его проще, портативнее и немного быстрее, используя -name вместо -path :

find . -name .git -prune -o -type d -print
3
28.01.2020, 02:35

Из-за отсутствия знаний о команде find я просто использую менее эффективную, но, скорее всего, не менее полезную и, вероятно, более читабельную однострочную команду, которая также включает grep:

find . -type d | grep -v "/\.git"
-1
28.01.2020, 02:35

Теги

Похожие вопросы