Копировать папки только с числовыми именами

Я только что обнаружил, что IdentitiesOnlyдля правильной работы необходим открытый ключ на локальном компьютере.

Без открытого ключа на локальном компьютере у меня всегда запрашивалась фраза-пароль, даже если закрытый ключ был в агенте и, конечно же, открытый ключ на удаленном компьютере.

Путь к открытому ключу совпадает с путем к закрытому ключу с добавлением .pub.

0
30.06.2021, 16:17
1 ответ

Я не знаю способа сопоставить имена удаленных файлов/каталогов с таким критерием, как полностью числовое значение. Однако, поскольку вы используете scp, кажется разумным предположить, что sshтакже доступен. Исходя из этого, вот как я рассматривал бы решение проблемы:

rhost="user@remoteHost"    # Fix as appropriate
rpath="/dir"               # Likewise

ssh -qn "$rhost" "find '$rpath' -maxdepth 1 -type d -print0" |
    while IFS= read -r -d '' item
        do
            if [[ "$item" =~ ^(.*/)?[0-9]+$ ]]
            then
                # Numeric directory
                echo "Copying $item" >&2            # Optional
                scp -r "$rhost":"$rpath/$item".    # Maybe -a instead of -r
            fi
        done

Предостережения

  • Требуется GNU findна удаленной системе (для-print0)
  • Требуется bashв локальной системе (для readи сравнения RE)
  • Настоятельно рекомендуется использовать аутентификацию на основе сертификата (, чтобы пароль не требовался повторно)
  • $rpathне должно содержать ни двойных, ни одинарных кавычек

Если у вас нет GNU findв удаленной системе, вы можете заменить -print0на -print, а затем изменить read -r -d '' item, чтобы он стал просто read -r item. Однако затем он может неожиданно работать со «странными» именами каталогов, такими как $'123\ntext\n456', которые следует исключить.

1
28.07.2021, 11:21

Теги

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