Я хочу перечислить только те каталоги, которые не находятся внутри каталога .git / на мой текущий путь.
Я пробую следующее:
find . -path "**/.git" -prune -o -print -type d
Каталоги .git исключены, но фрагмент также содержит список файлов. Но этого не должно быть, как я указал -тип d
. Как заставить утилиту find
вести себя так, как я описал?
Вы использовали -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
Из-за отсутствия знаний о команде find
я просто использую менее эффективную, но, скорее всего, не менее полезную и, вероятно, более читабельную однострочную команду, которая также включает grep
:
find . -type d | grep -v "/\.git"