bash-скрипт для перенаправления вывода 'cut'/'find' в 'scp' с применением некоторых преобразований

Сценарий, который предполагает bashили какую-то другую оболочку, выполняющую расширение фигурных скобок, и установленную GNU coreutils, выводит mkdirкоманды для создания какой-то структуры каталогов, в которой каталоги имеют имена из контрольных сумм MD5, рассчитанных случайным образом. числа.

Полезно это или нет, я не знаю. В скрипте нет немедленных ошибок, за исключением нескольких проблем со стилем и раскрытия переменных без кавычек.

1
29.04.2020, 18:35
1 ответ

Ввиду отсутствия конкретного определения для filefinderя предполагаю, что это что-то вроде этого (, но обновление см. ниже)

filefinder() { find "$1" -type f; }

Меня немного беспокоит, что если вы копируете несколько файлов с такими именами

a.c@@/Main
b.c@@/Main
c.h@@/Main

вы получите один файл на цели с именем Main. Поэтому я предположил, что для a.c@@/Mainцель должна оставатьсяa.c

Теперь вместо использования filefinderвы можете просто скопировать файлы за одну операцию. Я построил это решение так, чтобы его можно было параметризовать так же, какfilefinder(выше ):

.
filecopier() {
    find "$1" -type f -exec bash -c '
        for file in "$@"
        do
            file="${file#*/}"
            echo scp -p "${file}@@/Main" test@ip:"/path/${file##*/}"
        done
    ' _ {} +
}

Удалите echoиз scp, если вы уверены, что команды верны.


Похоже, что filefinderне так просто, как я предполагал. Тем не менее, мы все еще можем использовать аналогичный подход

.
filefinder... |
    while IFS= read -r file
    do
        echo scp -p "${file}@@/Main" test@ip:"/path/${file##*/}"
    done

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

0
28.04.2021, 23:17

Теги

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