1

У меня есть папка ~ 200 000 файлов с общим размером около 300 ГБ, которые мне нужно передать по SSH-соединению на удаленный хост. Я ищу способ удаления локальных файлов после того, как будет подтверждено, что они успешно скопированы на удаленный хост, но я не могу понять, как это сделать. rsync --remove-source-files кажется небезопасным, если разрывается соединение согласно другим сообщениям (здесь). Как это можно сделать безопасно?

3 ответа3

1

Есть сценарий оболочки:
Обратите внимание, что он делает некоторые предположения, которые я задокументировал ниже.

#!/bin/sh

# first, upload the directory structure
# be REALLY sure that it made it intact!
while true
do
    # try to upload it:
    rsync $flags --filter="+ */" --filter="- *" $source $destination
    # it uploaded fine? cool, break the loop (else try again):
    [ "$?" -eq 0 ] && break
done

# now the files
for file in $(find $source -not -type d)
do
    # again, be REALLY sure they copied okay!
    while true
    do
        # try to upload it:
        rsync $flags $file $destination/$file
        # it uploaded fine? cool, break the innermost loop (else try again):
        [ "$?" -eq 0 ] && break
    done
    # delete the local copy of the file:
    rm $file
done

Этот скрипт предполагает следующее:

  1. Эти $source , $destination и $flags были либо установлены в качестве переменных среды, либо заменены в скрипте фактическим источником, получателем и любыми другими флагами rsync вы хотите использовать. (Не заменить $? или $file .)
  2. Этот $source является относительным путем.
  3. Этот rsync завершит работу с ненулевым состоянием, если по какой-либо причине указанный $file не был скопирован на 100% успешно.
  4. Что вы проверили это на менее важных данных, потому что я не сделал.

Параметры rsync --filter были скопированы из сообщения в блоге неким парнем по имени Фил. Надеюсь, с ним все в порядке. :)

0

Может быть, вы можете использовать sshfs. sshfs позволяет вам "монтировать" удаленный каталог через ssh (фактически выполняя команды других ssh для имитации файловой системы). Затем вы можете использовать mv для перемещения ваших файлов.

Вам не нужно быть суперпользователем, поскольку это файловая система пользовательского пространства.

0

Вы можете разбить файлы на блоки по десять, например, а затем

rsync (source files) destination

И, если он прошел успешно, следуйте за ним с

rsync --remove-source-files (source files) destination

Добавленная пропускная способность второй команды rsync незначительна.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .