rsync исключает - от через ssh

Очень распространенным (хотя и не совсем надежным) способом проверки наличия интерактивного терминала является проверка того, установлен ли PS1:

if [[ -z "$PS1" ]]; then
    echo "Probably run as a script."
else
    echo "Probably interactive."
fi

Другая альтернатива - проверка наличия опции i в $-:

case "$-" in
   *i*)
       echo "Probably interactive"
       ;;
   *)
       echo "Probably scripted"
       ;;
esac

Существует также опция -t для test (он же [ и его кузен, [[):

fd=0 # stdin
if [[ -t "$fd" ]]; then
    echo "Interactive"
else
    echo "Scripted"
fi

Совет Linux Documentation Project.

dash и sh могут не иметь [ и [[, поэтому вам, возможно, придется явно использовать test, например. Например:

fd=0
if test -t "$fd"; then  # you might need /path/to/test
    echo "Interactive"
else
    echo "Scripted"
fi

Поскольку test является собственным двоичным файлом, я уверен, что все, что использует test -t, не зависит от оболочки.

1
06.12.2018, 13:23
1 ответ

Параметр --exclude-fromуказывает файл, который локальный процесс rsync должен прочитать, чтобы добавить в список исключений. Он не поддерживает нотацию, которую вы использовали для чтения файла с удаленного хоста; он интерпретирует имя файла как путь к локальному файлу, поэтому вы получаете сообщение об ошибке failed to open exclude file username@example.com:remote/path/to/folder/to/sync/.rsyncignoreпри попытке открыть именно этот файл.

Я не думаю, что есть способ сделать то, что вы хотите, кроме как сначала передать файл .rsyncignoreна локальный хост, а затем сослаться на этот файл с помощью опции --exclude-from.

Вам может помочь использование параметра -F, указывающего для каждого -файла каталога .rsync-filter, который считывается на стороне источника.

2
27.01.2020, 23:31

Теги

Похожие вопросы