Да, вы можете просто добавить -not -name
, если в вашем скрипте есть второй аргумент:
#!/bin/bash
targetDir="$1"
exclude="$2"
findString=" '$targetDir'"
if [[ ! -z "$exclude" ]]; then
findString="$findString -not -name '$exclude'"
fi
eval "find $findString"
Например:
$ ls
file1 file1.sh file2 file2.sh file3.sh file4.sh file5.sh
$ foo.sh .
.
./file1
./file2
./file1.sh
./file4.sh
./file3.sh
./file5.sh
./file2.sh
$ foo.sh . '*sh'
.
./file1
./file2
Если вы хотите иметь возможность определять несколько шаблонов для exclude:
#!/bin/bash
targetDir="$1"
findString=" '$targetDir'"
shift
exclude="'$1'"
shift
for i in "$@"; do
exclude="$exclude -a -not -name '$i'";
done
if [[ ! -z "$exclude" ]]; then
findString="$findString -not -name $exclude"
fi
eval "find $findString"
Если ваш specialCommand
на самом деле не требует tty, и вы заставили ssh
сделать его только для sudo
запроса пароля, другой альтернативой является:
(echo "mypass" ; cat commandInput) | ssh user@ip "sudo -Sp '' specialCommand"
Опция -S
из sudo
заставляет считывать пароль со стандартного ввода, который в данном случае исходит от вашего echo "mypass"
, в то время как опция -p ''
гарантирует, что запрос пароля также не будет отображаться.
Тогда вы можете поместить свой пароль в отдельный файл, защищенный соответствующими разрешениями. Обычно это лучшая практика, чем жестко запрограммировать пароль в скрипте. Тогда команда станет:
cat passwordFile commandInput | ssh user@ip "sudo -Sp '' specialCommand"
В этом последнем случае убедитесь, что файл паролей состоит ровно из одной строки только с паролем и ничего больше, иначе то, что следует после строки пароля, загрязнит ввод для вашего specialCommand
.
Как насчет:
(echo "mypass"; cat commandInput) | ssh -tt user@ip "sudo specialCommand"
Или, поскольку у вас, по-видимому, есть sudo
доступ к удаленному хосту, как насчет использования visudo
для добавления этой строки в самый конец/etc/sudoers
(после существующей строки, предоставляющей пароль sudo
. ] доступ кuser
)?
user ALL=(root) NOPASSWD: /full/path/of/specialCommand
Эта строка предоставляет пользователюuser
(и никому другому )разрешение на запускspecialCommand
(и ничего больше )от имени пользователя root без запроса пароля. При попытке выполнить любые другие команды через sudo
по-прежнему будет требоваться пароль, как обычно.
После этого вы сможете просто:
ssh -tt user@ip "sudo specialCommand" < commandInput