Необходимо сделать chown -R www-data /var/www/
(-R
означает рекурсивный).
Необходимо попробовать:
command=$(ssh -q user@host 'ls "/usr/local/username/'$folder'" | wc -l')
Вы не можете действительно вложить обратные галочки (и я не уверен, почему Вы хотели к этому так или иначе).
Это может быть намного более просто. Я понятия не имею, с чем Вы - Тринг, чтобы сделать {print $folder}
: фигурные скобки не имеют никакого смысла здесь, и при попытке включать $folder
в строке Вы просто записали бы $folder
. Вы не должны анализировать вывод ls
, это очень редко полезно и часто перестало работать.
if ! ssh user@host "test -e '/usr/local/username/$folder'"; then
# the file doesn't exist
Обратите внимание, что имя файла должно быть заключено в кавычки для удаленной оболочки. Я главным образом заботился об этом в своей команде выше путем окружения имени файла в удаленной команде с одинарными кавычками, но который только работает если $folder
самостоятельно не содержит одинарных кавычек. Если Ваша локальная оболочка является ударом, ksh93 или zsh, используйте это вместо этого, для заключения в кавычки любой одинарной кавычки:
q=\'\\\'\'
if ! ssh user@host "[ -d '/usr/local/username/${folder//\'/$q}' ]"; then
Другой подход, который обычно более удобен, должен смонтировать удаленную файловую систему с sshfs и работой над ним через нормальный интерфейс файловой системы. Я рекомендую это, если Вы не работаете с большим количеством удаленных серверов одновременно.
mkdir /path/to/mount/point
sshfs user@host /path/to/mount/point
if ! [ -d "/usr/local/username/$folder" ]; then