Как возобновить передачу файлов с помощью netcat, socat или curl?

TLDR;

  1. Получите список проблемных файлов (скопируйте и вставьте вывод pacman в файл ).
  2. Используйте awk , чтобы вырезать все, кроме путей к файлам, в новый список.
  3. Используйте и для удаления проблемных файлов в зависимости от списка.
  4. Запустите sudo pacman -Syuеще раз.

    отредактировано для добавления TLDR и исправления опечаток

Хотя я почти уверен, что не делал ничего глупого, у меня была эта проблема, может быть, каждый второй раз, когда я пытался обновить, так как я использую Manjaro; три-четыре раза в течение двух месяцев. Дело в том, что это исправляет это.

Получите список ваших файлов.

При сбое обновления в окне терминала вы получаете это:

error: failed to commit transaction (conflicting files)
evilfile: /usr/bin/evilfile exists in filesystem
libx000: /usr/lib/libx000.so.f.u.loser exists in filesystem
accountsservice: /usr/share/locale/ru/LC_MESSAGES/accounts-service.mo.yu.dnt.evn.spk.russian exists in filesystem

... и многое другое.

  • Скопируйте вывод из терминала и поместите его в файл. Я использовал nano и назвал свои «файлы», как в~/work/files .

  • Удаление лишней информации:

    cat files | awk '{print $2}' >> ~/work/files2

    Это берет второе «слово» из каждой строки и печатает его в файлы2.

Разберитесь с файлами

  • Вы можете удалить их, переместить или переименовать.

  • Если что-то ломается, проще всего это исправить, если мы сломаем это, переместив это, а не удаляя или переименовывая:
    mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2

  • Если вы действительно хотите удалить их, для чего нет причин(ОПАСНОСТЬ ОПАСНОСТЬ):при чтении -r файла; сделать sudo rm --"$file";сделано < файлы2

Обновление

  • Чтобы заставить --перезаписывать работать, что нам нужно сделать, чтобы pacman понял, что пакет не сломан, вам нужен следующий синтаксис:

    sudo pacman -S package_name --overwrite /location/of/thing

    • В моем случае:sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
    • По примеру:sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
  • У меня была забавная проблема: если я удалял символическую ссылку libidn2.so.0, ничего не работало, а когда я возвращал ее обратно, я получал ошибку «существует в файловой системе». Вышеприведенное с перезаписью --— это все, что сработало для меня.

  • Наконец:

    sudo pacman -Syu

1
26.11.2019, 15:33
1 ответ

Если ваша команда, как указано в комментариях,:

socat -u FILE:somedatabase.raw TCP-LISTEN:4443,keepalive,tos=36

вы можете на отправляющей стороне выполнить seekи начать обслуживание оттуда:

socat -u gopen:somedatabase.raw,seek=1024 TCP-LISTEN:4443,keepalive,tos=36

на принимающей стороне тоже нужно искать:

socat tcp:example.com:4443 gopen:somedatabase.raw,seek=1024

Проверьте справочную страницу для socat, там есть и другие параметры, которые могут вас заинтересовать.

2
27.01.2020, 23:29

Теги

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