Легко использовать программу install
из coreutils, которая обычно используется именно для этой цели при сборке систем типа automake:
install -D /path/to/source /path/to/destination
Обратите внимание, что install
создает все части пути так же, как это делает mkdir -p
, смотрите man install
. Мне любопытно, почему вы не включили почему вы хотите это сделать. Позвонить mkdir
и cp
очень просто.
SymLink не будет работать. Жесткая ссылка (когда это возможно) не будет работать ни потому, что оба файла будут иметь одинаковые разрешения. Но я бы сделал следующее: вместо ссылки напишите сценарий оболочки /usr/bin/myscript.py
, который выполняет сам скрипт:
#!/bin/sh
exec python /path/to/wherever/I/have/put/myscript.py "$@"
«$ @»
передает какие-либо параметры; Если ваш сценарий не принимает никаких параметров, вы можете безопасно удалить эту часть.
символьная ссылка А не влияет на полномочия своей цели, это - просто способ сохранить путь, это сопровождается автоматически ядром. На самом деле много систем игнорируют полномочия символьных ссылок в целом.
жесткая ссылка А не помогла бы вам, так как это - способ иметь тот же файл (то же содержание, те же метаданные включая полномочия) в нескольких местоположениях в файловой системе.
можно использовать bindfs для создания альтернативного представления файловой системы, где файлы имеют другое разрешение.
bindfs --perms=a+x /path/to/wherever/I/have/put ~/bin/wherever
, Который сделал бы все файлы в альтернативном исполняемом файле представления. Это - вероятно, не удобный метод в вашем случае, но может быть полезно для других с подобной проблемой.
действительное решение для вас состояло бы в том, чтобы зафиксировать систему репозитория так, чтобы это не заботилось о полномочиях, предполагая, что система загрузки может к исполняемому файлу make-файлов. Сбой этого, что я сделал бы, состоит в том, чтобы изменить разрешение файлов после загрузки.
#!/bin/sh
actual-download-command
chmod +x /path/to/wherever/I/have/put/*.py