Сценарий, который я написал, предназначался для перемещения каталогов отдельных дней из старого местоположения в новое местоположение со структурой, подобной этой:
/old/YYYY/MM/DD
/new/YYYY/MM/DD
и для другой задачи (не связанной с перемещением данных) я создал мягкую ссылку в новом месте, как это (это была моя первая ошибка):
/new/2011/09 -> /old/2011/09
Мой сценарий необходим для вызова этой функции:
for d in os.listdir("/old/2011/09"):
shutil.move(os.path.join("/old/2011/09/", d), os.path.join("/new/2011/09", d))
После запуска моего скрипта 2011/09 был пуст в обоих. Я имел это происходить на работе с неархивированными данными ... большая проблема. Мой вопрос заключается в том, почему shutil.move () не выдавал мне ошибку о том, что дневной каталог, который я перемещал, уже существовал? Каждый день внутри 09 должен был быть одним и тем же каталогом из-за мягкой ссылки.
/new/2011/09/01 == /old/2011/09/01
Разве вызов shutil.move не проверяет src и dst перед вызовом shutil.copy2? Из документов: «Каталог назначения еще не должен существовать». или это только когда он использует переименование? И если это имеет значение, то и старые, и новые локации были glusterfs.
shutil.move Документация
shutil.copy Документация
Спасибо за предоставленную ясность.
РЕДАКТИРОВАТЬ / ОБНОВИТЬ : Я отправил вопрос в список python, спрашивающий, почему это поведение существует, и спросил, следует ли его изменить ( архив списка ). Они предложили мне подать отчет об ошибке. Выполняя тесты для отправки ошибки, я обнаружил, что это было исправлено в Python 2.7. Вы можете увидеть различия в источнике в объявлении функции перемещения: Python 2.6 и Python 2.7 .
Это все еще делает перемещение / переименование, но волшебным образом не удаляет весь каталог.