Отправка папок с помощью rsync на сервер

lessпредставляет собойприложение termcap , использующее интерфейс termcap для получения всей информации, которую оно «знает» о данном терминале. Если его разработчик не введетжестко -закодированноеповедение (, как это сделано в очень немногих программах, которые я не буду упоминать ),lessне будет поддерживать для этих комбинаций клавиш, поскольку они не являются стандартными функциями (, см., например, столбец termcap возможностей, перечисленных в ncurses' terminfo (5 )), и не имеют 2-присвоенных им имен персонажей (см. терминальную базу данных для сводки расширений ).

Между прочим, ссылаясь на мой ответ и бегло взглянув на исходный -код , я не вижу ничего, что соответствовало бы левому/правомусловодвижение (, если только это не является предполагаемым значением сдвига влево/вправоA_LSHIFTиA_RSHIFT). git fault говорит, что они, а также комментарий на странице руководства о слове относятся к 2007 году (версии 394 ). Эти выглядят более многообещающе (из 2016 года):

    SK(SK_CTL_RIGHT_ARROW),0,       A_RRSHIFT,
    SK(SK_CTL_LEFT_ARROW),0,        A_LLSHIFT

, но в комментарии к регистрации написано только

commit e5c195113d1666ac506ea3f65545d436d96fe099
Author: Mark Nudelman 
Date:   Sat Oct 22 15:25:44 2016 +0000

    New commands ESC-{ and ESC-} to shift to start/end of displayed lines.

Читая код (в command.c)для сдвига, я не увидел ничего, что не согласуется с выводом о том, чтоlessлистает по столбцам(одиночным символам )а не слов , но комментарий ОП указал на эти:

    ESC,SK(SK_LEFT_ARROW),0,        EC_W_LEFT,      /* ESC LEFTARROW */
    SK(SK_CTL_LEFT_ARROW),0,        EC_W_LEFT,      /* CTRL-LEFTARROW */
    ESC,'w',0,                      EC_W_RIGHT,     /* ESC w */
    ESC,SK(SK_RIGHT_ARROW),0,       EC_W_RIGHT,     /* ESC RIGHTARROW */
    SK(SK_CTL_RIGHT_ARROW),0,       EC_W_RIGHT,     /* CTRL-RIGHTARROW */

, которые используютпробелв качестве разделителя для "слов". Возможно, когда разработчик вносил эти изменения, он имел в виду подражание vi, который может делать и то и другое (, хотя слова vi разделены по-другому ).

Предлагаемые*выходлевая -стрелкаи т. д. приведены с помощью этих строк из таблицы:

    ESC,SK(SK_LEFT_ARROW),0,        EC_W_LEFT,      /* ESC LEFTARROW */

    ESC,SK(SK_RIGHT_ARROW),0,       EC_W_RIGHT,     /* ESC RIGHTARROW */

Однако — текущая программа не содержит назначений , использующих эти символы SK_CTL_RIGHT_ARROWили SK_CTL_LEFT_ARROW. Это должно быть сделано в lesskey , например, в этом операторе case(или рядом, во всяком случае):

            switch (*++p)
            {
            case 'u': ch = SK_UP_ARROW; break;
            case 'd': ch = SK_DOWN_ARROW; break;
            case 'r': ch = SK_RIGHT_ARROW; break;
            case 'l': ch = SK_LEFT_ARROW; break;
            case 'U': ch = SK_PAGE_UP; break;
            case 'D': ch = SK_PAGE_DOWN; break;
            case 'h': ch = SK_HOME; break;
            case 'e': ch = SK_END; break;
            case 'x': ch = SK_DELETE; break;
            default:
                error("illegal char after \\k", NULL_PARG);
                *pp = p+1;
                return ("");
            }

Без присвоений в коде они только жестко -закодированы, не настраиваются.

Конфигурации MSDOS / OS/2 отличаются от конфигурации Unix наличием (жестко -закодированной )таблицы кодов клавиш:

#if MSDOS_COMPILER || OS2
        static char k_right[]           = { '\340', PCK_RIGHT, 0 };
        static char k_left[]            = { '\340', PCK_LEFT, 0  };
        static char k_ctl_right[]       = { '\340', PCK_CTL_RIGHT, 0  };
        static char k_ctl_left[]        = { '\340', PCK_CTL_LEFT, 0  };

и позволяет использовать их в операторе case:

#if MSDOS_COMPILER || OS2
        case SK_INSERT:
                s = k_insert;
                break;
        case SK_CTL_LEFT_ARROW:
                s = k_ctl_left;
                break;
        case SK_CTL_RIGHT_ARROW:
                s = k_ctl_right;
                break;

(примечание :по-прежнему нет назначений, поэтому регистры не используются ), а в конфигурации termcap эти символы вообще не используются.(termcap является «расширяемым», и если вы потрудитесь изобрести двухсимвольную мнемонику -для собственного использования и меньше модифицировать для реализации этих случаев, она будет делать то, что вы хотите ).

Повторное посещение страницы руководства lesskey , там написано следующее:

An action may be followed by an "extra" string. When such a command is entered while running less, the action is performed, and then the extra string is parsed, just as if it were typed in to less. This feature can be used in certain cases to extend the functionality of a command. For example, see the "{" and ":t" commands in the example below. The extra string has a special meaning for the "quit" action: when less quits, first character of the extra string is used as its exit status.

Это означает, что вы могли бы сделать что-то подобное:

\e[1;5D     noaction \e\e[D
\e[1;5C     noaction \e\e[C

для преобразования в дополнительную строку , которая использует предопределенное слово -shift.

0
26.06.2020, 09:35
1 ответ

Вам просто нужно переключить аргументы (, которые представляют источник и пункт назначения ), например

rsync -av./newfolder root@aaa.aaa.aaa.aaa:/home/my_folder

Взгляните на man rsync, в котором объясняется, что завершающая косая черта после newfolderбудет передавать только содержимое указанного каталога -. В этом случае вы можете изменить место загрузки на .../my_folder/newfolder.

1
18.03.2021, 23:24

Теги

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