Доступ к ..
на самом деле работает не так, как вы ожидаете, когда задействованы символические ссылки...
И когда вы пытаетесь сделать это в bash, bash пытается быть «полезным» и исправляет это для вас, так что проблема не становится очевидной.
Но, короче говоря, когда вы переходите к /home/me/project2/src/hdmap/../third_party
, ядро сначала разрешает символическую ссылку «hdmap», попадая в /home/me/repo/robot_dev/cognition/hdmap
, затем ищет ..
, что означает родительский каталог , который каталог hdmap, поэтому /home/me/repo/robot_dev/cognition
, а затем он попытается найти там третью _сторону.
Учитывая, что /home/me/repo/robot_dev/cognition/third_party
не существует (или, если он существует, это не то же самое, что /home/me/repo/sim/third_party
, что вам и нужно ), вы получаете ошибку «файл не найден».
Bash хранит переменную $PWD
с путем, сохраненным в виде строки, и поэтому он может помочь «разрешить» ссылки ..
в самой оболочке, прежде чем передать ядру путь... Таким образом, он будет скрыть от вас эти подробности.
Вы можете отключить это поведение, используяset -P
(илиset -o physical
)в bash. (Подробнее см. справочную страницу bash.)
Чтобы помочь вам с основной проблемой... Возможно, подходящим решением будет использование cp -rl
для копирования деревьев. Параметр -l
для cp
создает жесткие ссылки. В данном случае это не должно быть проблемой, тем более что я полагаю, что вы не собираетесь изменять файлы. Ему по-прежнему придется проходить структуру данных и создавать каждый объект отдельно, но ему не нужно будет создавать какое-либо содержимое...
Если вы работаете с современной файловой системой (, такой как Btrfs ), вы также можете попробовать cp -r --reflink
, которая создает копию CoW (-на -запись )копию. По сути, это жесткая ссылка, но немного лучше, поскольку между двумя именами нет связи, они просто разделяют блоки на бэкэнде, прикосновение к одному из файлов фактически разветвляет их на два отдельных файла. (Но я полагаю, что жестких ссылок вам вполне достаточно.)
Возможно, есть некоторые приемы, которые вы могли бы проделать с git, чтобы просто отображать каталог, который вам нужен на каждом этапе... Таким образом, вы действительно можете клонировать нужные вам части... Но это может быть сложнее выполнить или поддерживать... Надеюсь cp -rl
вам будет достаточно!
Да, именно для этого сегодня и используются эти устройства. Я храню некоторые для этого случая использования -.
Однако не рассматривайте функциональность концентратора Ethernet с коммутацией -как функцию безопасности. Им разрешена утечка :, они будут делать это, когда устройство не говорило, поэтому его местоположение неизвестно, или всякий раз, когда количество слотов в таблице заполнено, а коммутатор забывает об устройстве. Переключение только для производительности, а НЕ для безопасности.