воскресенье, 5 декабря 2010 г.

mv: Почему нельзя переместить каталог, если такой уже есть

Попытаемся переместить /src в /dst/src, при том, что такая уже есть:
mv /src /dst/
mv: rename /src to /dst: Directory not empty

В мане сказано, почему:
As the rename(2) call does not work across file systems, mv uses cp(1)
and rm(1) to accomplish the move. The effect is equivalent to:

rm -f destination_path && \
cp -pRP source_file destination && \
rm -rf source_file

Таким образом, если бы команда отработала, сначала очистило бы содержимое старой папки, а это несколько не то, что нам нужно.
Риторический вопрос, что мешает убрать первый rm, чтобы получилось копирование с заменой...
Как вариант решения:
rsync -aS /src /dst/
rm -rf /src
Не забываем, что у rsync закрывающий слэш имеет значение.

Комментариев нет:

Отправить комментарий