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/")
или просто запустите его оттуда в первую очередь. Насколько я знаю, у вас нет возможности вручную решить, куда идет файл подкачки.