2016-07-03 6 views
0

Я пытаюсь симлинкой всех файлов в каталоге в целевом каталог, выполнив:Linux символического все файлы в директории добавление «*»

ln -s /directory/* /target-directory 

Проблема заключается в том, когда я иду в целевом каталог- , Я вижу это «*», звездочку в кавычках, а не все файлы в первом каталоге. Что я делаю не так? Благодарю.

+0

Действительно ли не скрытый файл/каталог в каталоге/каталоге? – anishsane

+0

У меня получается другой результат, для меня команда работает так, как ожидалось. – arkascha

+0

Пожалуйста, добавьте дополнительную информацию: какой тип оболочки вы используете? Какое распределение? – arkascha

ответ

0

Не создавайте каталог назначения и сделать

ln -sd ./source ./destination

+3

OP хочет символизировать файлы, а не папку. – arkascha

2

Обычно случается, когда Что бы вы бежите ln -s /directory/* /target-directory является то, что оболочка будет расширяться /directory/* в список (ныне существующих, видимых) файлов в/directory /, а затем передать это значение в ln в свой список аргументов. Результат будет эквивалентен чему-то вроде ln -s /directory/file1.txt /directory/file3.pdf /directory/file3.c /target-directory. Обратите внимание, что команда ln не увидит «*» и поэтому не будет включать ее ни в источник ссылки, ни в целевое имя.

Поскольку «*» используется как имя ссылки, оно не расширяется. Есть несколько причин, это может произойти:

  • Вы могли бы иметь набор опций noglob оболочки. Но вы сказали в комментариях, что это не так.

  • Расширение оболочки может не совпадать с любыми файлами, и в этом случае оболочка будет просто передавать его без изменений до ln, давая результат, который вы описываете. Вы сказали, что создали файл в исходном каталоге, но повторили ли вы его после этого? Другая возможность заключается в том, что в пути к каталогу есть опечатка, поэтому он не находит соответствующий каталог (не говоря уже о любых файлах в нем).

О, еще одно замечание: вы сказали, когда вы идете в целевой каталог, вы увидите звездочку в кавычки. Как вы выглядите? Поскольку, если вы просто используете ls, он не должен включать кавычки в листинг, если они фактически не являются частью имени файла. [Edit: Mark Plotnick указал, что некоторые версии GNU lsdo добавляют кавычки к некоторым именам файлов.] Я понятия не имею, как команда, которую вы дали, может добавлять кавычки к имени файла.

+1

Некоторые версии вывода GNU 'ls' цитируют имена файлов, которые могут потребовать кавычки, чтобы их вставляли в оболочку. Подробности в [Почему «ls» внезапно обматывает предметы пробелами в одинарных кавычках] (http://unix.stackexchange.com/questions/258679/why-is-ls-suddenly-wrapping-items-with-spaces-in- одиночные кавычки) –

+0

@MarkPlotnick Это объяснило бы это; благодаря! –

0

Если вы установите параметр failglob, вы получите сообщение об ошибке, если расширение * невозможно.

shopt -s failglob 

 Смежные вопросы

  • Нет связанных вопросов^_^