Как создать символическую ссылку на каталог с пробелом в нем?


24

Я пытался создать символическую ссылку, используя следующую команду:

ln -s "~/Foo Bar/" Foo

... но это не сработало (то есть когда я захожу в finder и пытаюсь дважды щелкнуть по нему, он говорит, что он указывает на неверный путь, и предлагает мне удалить псевдоним или исправить его). Мне пришлось переименовать папку, FooBarа затем выполнить следующую команду:

ln -s ~/FooBar/ Foo

Как создать ссылку, не убирая пробел в имени папки?

Я ищу способ сделать это в терминале, а не в пользовательском интерфейсе Finder.


1
Хотя Гордон Дэвиссон прав, вы должны знать, что псевдонимы и символические ссылки (символические ссылки) разные. ln -sделает символические ссылки. Искатель делает псевдонимы. Они практически идентичны в практическом, обычном использовании, но важно признать, что они разные . Символьные ссылки указывают на путь к каталогу, а псевдонимы указывают на файл. Если вы оба указали на один и тот же файл и переместите файл в другую папку, а затем создайте новый файл в старой папке, псевдоним будет указывать на перемещенный оригинал, а символическая ссылка будет указывать на новый файл.
CajunLuke

1
@ Cajun: спасибо за разъяснения. Это сбивает с толку тот факт, что искатель отображает свойство «Вид» символической ссылки как «Псевдоним».
Чувственный

4
Завершение табуляции также замечательно, если вы сделаете это: ln -s ~/Foo<tab>(где <tab> обозначает фактическую клавишу tab (табуляции) на вашей клавиатуре), если есть только одна папка, которая начинается с «Foo», ~тогда она будет автоматически расширить путь к ~/Foo\ Bar/.
Джейсон Салаз,

Ответы:


41

Кавычки не могут ~быть расширены до вашей домашней папки, поэтому вам нужно либо заключить в кавычки только часть с пробелом в ней:

ln -s ~/"Foo Bar/" Foo

Примечание: сколько именно указано в кавычках, не имеет значения, если пробел находится в указанной части, а ~ / - нет. ~/Foo" "Bar/, ~/"Foo Bar"/, И ~/Fo"o B"ar/т.д., все эквивалентны. Кроме того, одинарные и двойные кавычки одинаково влияют на пробелы (хотя они различаются для других символов), поэтому ~/'Foo Bar/'и ~/Foo' 'Bar/т. Д. Также будут работать.

Вы также можете использовать escape, чтобы не использовать пространство как разделитель:

ln -s ~/Foo\ Bar/ Foo

5
Вы можете серьезно процитировать просто пространство? Это потрясающе!
Джейсон Салаз

Или "$HOME/Foo Bar/".
wchargin

@wchargin Это сработает. Обратите внимание, что в отличие от ~, $HOME должны быть в двойных кавычках, чтобы избежать путаницы, если ваш домашний каталог содержит пробелы или другие странные символы. "$HOME/Foo Bar/"(как вы предлагаете) "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/и т. д. будет работать.
Гордон Дэвиссон

0

Я проверял это сам. У меня нет проблем с пробелом в нем:

    $ ln -s "/Users/joe/test/foo bar"/ linkToFoo_Bar

ls показывает: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ и работает без проблем в терминале и поиске.


10
Вы использовали полный путь, а не ~помощник.
Джейсон Салаз
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.