ZIP застрял с мусорным файлом

Я обычно люблю тщательно исследовать свои проблемы, прежде чем спрашивать сообщество. Но сейчас я застрял. Я использую следующую команду:

zip -ur zipfile.zip /volume1  

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

Когда я запускаю эту команду вручную, она выполняется отлично, но когда я запускаю ее через скрипт на python, я четко вижу на целевой машине, что команда выполняется (проверено с помощью top) но создается мусорный файл с каким-то нечетным именем, и хотя команда все еще выполняется, но больше ничего не происходит, ни один zip-файл не создан, нет ничего. Только запущенная команда и бесполезный созданный файл мусора.
Цель состоит в том, чтобы просто скопировать файлы некоторых пользователей в zip-файл, нас не заботит структура каталогов или что-то еще, что нам просто нужно, чтобы пользовательские файлы были скопированы с общего тома1 на наш резервный жесткий диск.

Что могло бы привести к этому?

2 ответа

Предлагаемое решение: попробуйте заархивировать каждый каталог отдельно, и, конечно же, не пытайтесь рекурсивно сжать все файлы в /

Подробный ответ:

Страница руководства zip объясняет, какую опцию вы использовали, например -r средства:

-r
--recurse-paths
    Travel the directory structure recursively

Когда вы запускаете следующую команду:

zip -ur zipfile.zip / 

zip пытается сжать все файлы в системе (от root / и ниже).

zip использует временный файл (в вашем случае вы назвали его "мусорным файлом"), в котором хранятся данные, которые он собрал. После завершения операции zip zip перемещает этот временный файл в полученный zip-файл.

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

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

Кроме того, вы можете попробовать добавить устройства под /dev папки и аналогичные файлы, которые я не уверен, что вы хотели бы сжать их.

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

  • Например, я бы сделал любой каталог в любом месте на компьютере. /zip/и перейдите в него
  • Затем запустите команду zip, но добавьте -j /zip/или где ваш зип дир, чтобы он там конкретно ничего не трогал, в том числе и мертвый файл подкачки.
  • Полная команда будет выглядеть как
      zip -ur zipfile.zip /volume1 -j /zip/

Все это будет работать и в сценарии Python, если вы либо сделаете

      os.chdir("/zip/")

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

Другие вопросы по тегам