Проблема здесь в том, что шаблон подстановки имен файлов в командной строке будет расширен оболочкой (, если он соответствует каким-либо именам в текущем каталоге )до вызова утилиты.
Это означает, что фактическая выполняемая команда может быть чем-то вроде
find. ! -name thing1-custom.conf thing2-custom.conf thing3-custom.conf -delete
Это можно увидеть, если включить трассировку с помощью set -x
в командной строке перед вызовом команды. Используйте set +x
, чтобы позже отключить трассировку.
Ваша команда также должна была дать вам одно из сообщений об ошибке unknown option
или paths must precede expression
в зависимости от вашей реализации утилиты find
.
Здесь правильно цитировать шаблон из оболочки, как указал Майкл Гомер в комментариях (, он говорит, чтобы избежать *
, но цитирование всего шаблона, ИМХО, выглядит красивее и имеет то же самое. эффект):
find. ! -name '*custom.conf' -delete
Таким образом, шаблон передается в find
как есть, и утилита самостоятельно выполняет сопоставление со всеми именами в текущем каталоге.
Я бы также добавил к этому -type f
, чтобы мы были уверены, что будем работать только с обычными файлами.:
find. -type f ! -name '*custom.conf' -delete
I 'm currently using dpkg to manage the installation of our software and would like to install to a folder under /usr/bin/ because I think it is convenient to have all software for our system in a separate sub-folder, which is immediately distinguishable from the other software in /usr/bin/.
Это плохая идея, и она противоречит соглашениям Стандарта иерархии файловых систем. По крайней мере, добавьте символические ссылки внутри /usr/local/bin/
или/usr/bin/
(см. также обновление -альтернативы (1))
Попробуйте, чтобы ваше программное обеспечение управлялось какой-то одной командой (, напримерgit
), или, по крайней мере, имело общий каталог/opt/Foo/
(с, например. /opt/Foo/bin/
для исполняемых файлов и попросите вашего пользователя добавить /opt/Foo/bin/
к его/ее$PATH
)
I would like to know how to configure debian package manager to update the path to include this new subfolder, e.g. /usr/bin/mysystem/.
Это невозможно, и взломы зависят от оболочки входа в систему вашего пользователя (, а не от /bin/zsh
и/bin/bash
). См. команду chsh (1)и environ (7)и exec (3)или execve (2 )(. используется снарядами ). Пользователь может установить свой интерактивный $PATH
, например. в ~/.bashrc
(, если его оболочка входа/bin/bash
)или ~/.zshrc
(, если его оболочка входа/bin/zsh
)и т. д....
Узнайте больше о оболочках Unix и как минимум bash (1). Посмотрите исходный код существующих оболочек, например. GNUbash
или zsh или es или рыба и другие. Часто это свободное программное обеспечение(или, по крайней мере, открытый исходный код ). Используйте strace (1)в своей собственной оболочке, чтобы понять, какие системные вызовы(см. системные вызовы (2))вызываются ею.
Почитайте какой-нибудь учебник по операционным системам .
Возможно, вдохновитесь ssh -агентом (1). Иногда у меня есть eval $(ssh-agent -s)
в некоторых моих сценариях оболочки, например , использующихstartx
.