![какова цель cp -s?](https://rvso.com/image/36039/%D0%BA%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0%20%D1%86%D0%B5%D0%BB%D1%8C%20cp%20-s%3F.png)
как показывает ответ на этот вопрос, Есть ли разница между жесткими ссылками с помощью cp -l или ln?
Цель создания опции -l для команды cp - рекурсивно создать жесткие ссылки (на содержимое) каталогов. Опция -s является аналогом, создавая мягкие ссылки вместо жестких ссылок, но, похоже, ее нельзя использовать рекурсивно.
Любая попытка сделать это приведет к сообщению об ошибке:
cp: `source_dir/source_file': can make relative symbolic links only in current directory
Возможно, это зависит от дистрибутива. В Ubuntu 12.04 это результат. Работает только если исходный файл и ссылка находятся в одном каталоге.
Возможно, синтаксис неверен?
cp -rs target_directory destination_directory
- это то, что я использовал.
пример:
$ ls sourcedir/
-rw-rw---- 1 user group 1123 Jan 8 23:10 source_file
$ cp -rs sourcedir/ targetdir/
cp: `targetdir/sourcedir/source_file': can make relative symbolic links only in current directory
решение1
Указан абсолютный путь к исходному каталогу:
cp -rs $PWD/sourcedir/ targetdir/
Символические ссылки в targetdir
этом случае будут содержать абсолютные пути к sourcedir
.
В противном случае, если бы он просто создал символическую ссылку, он бы создал что-то вроде:
targetdir/filename -> sourcedir/filename
Но это не правильный относительный путь для поиска исходного файла, он должен быть таким:
targetdir/filename -> ../sourcedir/filename
cp
не пытается выяснить, как исходный и целевой каталоги соотносятся друг с другом, чтобы иметь возможность добавить соответствующее количество ../
префиксов.