ls.. не работает правильно с символьными ссылками

man страница для find дает:

-prune True; if the file is a directory, do not  descend  into  it.  If
      -depth  is  given,  false;  no  effect.  Because -delete implies
      -depth, you cannot usefully use -prune and -delete together.

Таким образом в первом примере это не так, чтобы -path ./.git -prune неверно и поэтому действие по умолчанию (-print) не был бы назван, следовательно строка печатается.

2
13.04.2017, 15:36
2 ответа

не проблема LS . Это то, как работают симличины. .. .. . Получает вас в родитель текущего каталога, каталог не знает, что вы добрались до него через SymLink. Оболочка должна вмешиваться, чтобы предотвратить это поведение. Для встроенного CD , есть специальное обращение, которое не просто звонить ChDIR , но запоминает полный путь к каталогу и пытается выяснить, что вы хотите. LS , однако, не является встроенным. Оболочка должна измениться .. к другому пути, прежде чем передавать его на LS , если вы хотите получить то, что вы ожидаете. ZSH Вариант Chase_dots поможет вам с этим.

Вообще говоря, SymLinks к каталогам являются грязным бизнесом. Для критических и полупостоянных приложений, скорее используйте Mount --bind .

4
27.01.2020, 22:00

Так как вы пометили свой вопрос с ZSH Я предполагаю, что мы говорим об этой оболочке.

, скорее всего, вы настроили (прямо или косвенно с некоторым внешним сценарием, как OH-My-ZSH ) Переменные Chase_Links и / или Chase_dots . Чтобы подтвердить, что запустить SETOPT | Greep -i Chase и посмотрите, перечислены ли они. Если они, просто unset их:

unsetopt CHASE_DOTS
unsetopt CHASE_LINKS
0
27.01.2020, 22:00

Теги

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