Вопрос или проблема
Я пытаюсь создать символическую ссылку, как ниже:
ln -s /home/scripts/logs /home/log
Директория /home/log
уже существует и не может быть удалена. Когда я это делаю, создается символическая ссылка /home/log/logs
. Я знаю, что если цель — это директория и она уже существует, то ln -s
создаст подпапку исходного элемента внутри целевой директории. Но я просто хочу, чтобы содержимое моей исходной директории /home/scripts/logs/test_contents
оказалось в целевой /home/log/test_contents
.
Есть ли какое-то решение для этого?
Примечание: я не могу удалить /home/logs
, которая содержит логи других приложений.
У вас команда ln -s
записана в обратном порядке. Первый операнд — это то, куда вы хотите, чтобы ссылка указывала, а второй — это то, как вы хотите назвать саму символическую ссылку.
Вы можете запомнить порядок операндов с помощью команды ln -s это тут
и читать это как “Возьми это и создай для него символическую ссылку здесь” (как mv это тут
— “Возьми это и перемести сюда“, и т.д.)
Команда
ln -s /home/logs /home/scripts/logs
создаст символическую ссылку /home/scripts/logs
, указывающую на /home/logs
(при условии, что /home/scripts/logs
ещё не существует).
На практике, вы, вероятно, работаете не с директориями непосредственно под /home
, поэтому скорее всего вы хотите это:
ln -s "$HOME/logs" "$HOME/scripts/logs"
… или что-то подобное.
Кажется, вы хотите создать символическую ссылку на файлы в вашей директории, а не на саму директорию. Тогда вам, вероятно, нужно это:
ln -s /home/scripts/logs/* /home/log/
Ответ или решение
Для создания символической ссылки на содержимое директории, а не на саму директорию, вам нужно использовать специальный подход. Давайте рассмотрим, как это сделать.
В вашем случае, вы хотите сделать так, чтобы содержимое директории /home/scripts/logs
оказалось в директории /home/log
, но не создавая при этом подкаталог logs
. Поскольку вы не можете удалить уже существующую директорию /home/log
, вам следует использовать следующий метод.
-
Создайте папку для хранения содержимого: Если ваша цель состоит в том, чтобы содержимое
/home/scripts/logs
отображалось в/home/log
, но при этом вы не хотите создавать подкаталогlogs
, то используйте следующую команду для создания символических ссылок на файлы внутри директорииlogs
.Вы можете использовать команду
ln -s
с использованием подстановки*
, чтобы создать символические ссылки на все файлы в источнике:ln -s /home/scripts/logs/* /home/log/
Эта команда создаст символические ссылки на каждый файл внутри директории
/home/scripts/logs
в директории/home/log
. Таким образом, содержимое/home/scripts/logs
будет доступно в/home/log
без создания дополнительных подкаталогов. -
Обратите внимание на наличие файлов: Убедитесь, что в директории
/home/scripts/logs
действительно есть файлы, иначе ссылка не будет создана. Также убедитесь, что файлы не имеют одноименных файлов в директории/home/log
, чтобы избежать конфликтов. -
Проверка результата: После выполнения команды проверьте содержимое директории
/home/log
, чтобы убедиться, что все файлы теперь представлены в виде символических ссылок.
Таким образом, у вас будет доступ к файлам из /home/scripts/logs
в директории /home/log
, без необходимости удаления или изменения существующего дерева каталогов.