Копировать и перезаписывать каталог рекурсивно

У меня есть каталог с именем «isting_folder »и другой каталог с именем« temp »

Я хочу заменить содержимое «isting_folder» на «temp» вместе с любыми подкаталогами.

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

Есть ли способ сделать это? Какую команду я должен использовать для достижения этой цели?

5
задан 22 March 2015 в 14:03

3 ответа

Если оба orig_folder и temp находятся на том же физическом диске, переименовывание (перемещения) их чрезвычайно мгновенно. Это означает, что Вы могли просто сделать

mv orig_folder foo && mv temp orig_folder && rm -rf foo

Это переименует orig_folder кому: foo, затем переименуйте temp кому: orig_folder и наконец удалите foo. В той же файловой системе, двух mv операции возьмут совсем мало времени (0,004 секунды в моей системе).

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

mv /path/to/temp . && mv orig_folder foo && mv temp orig_folder && rm -rf foo
8
ответ дан 22 March 2015 в 14:03

Объединение принятого ответа здесь с командой для копирования одного каталога в другого, ниже команды должно сделать задание:

rm -rfv <existing_folder>/* && cp -r <temp>/* <existing_folder>

, Но, как в ответе в ссылке говорится, отмечают что:

  • /* часть очень важна. При помещении пространства перед эти * оно удалит все файлы в текущем каталоге.
  • это не удалит скрытые файлы
  • "быть очень (очень) тщательной игрой с rm, -r и * все в той же команде. Они могут быть катастрофической комбинацией".
2
ответ дан 22 March 2015 в 14:03

Вы попробовали rsync?

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

$ rsync -av --delete temp/ existing_folder/

Уведомление наклонная черта после временного файла, это требуется, потому что Вы хотите синхронизировать содержание. Без него это создало бы временный файл каталога в существующей папке.

удалить аргумент делает файлы, которые больше не находятся во временном файле быть удаленными в existing_folder.

можно также сделать пробный прогон , если Вы добавляете-n аргумент. Это скажет Вам, какие изменения будут сделаны, ничего не делая.

9
ответ дан 22 March 2015 в 14:03

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

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