Команда mv
не перемещает с перезаписью поверх папки, если таковые уже существуют, поэтому часто вместо нее используют команду копирования cp
:
yes | cp -rf source/example/* destination/example/
Yes приходится использовать так как команда cp во многих версия Linux уже является алиасом для интерактивной команды alias cp='cp -i'
и потому игнорирует ключ -f и все равно спрашивает подтверждение перезаписи на каждом файле. Это весьма долгая процедура для большого числа маленьких файлов.
Второй минус такого подхода — требуется больше места при копировании, чем при перемещении — иногда это может сыграть роль.
Поэтому для перемещения файлов в папках и подпапках вне зависимости от их текущего присутствия я рекомендую использовать другую команду rsync
:
rsync -avrh --remove-source-files ./source/folder/ /destination/folder/
Комментарии:
- путь к папкам в rsync должен заканчиваться /
- Если место назначения еще не существует, rsync автоматически его создаст.
- Исходные файлы будут удалены при успешной синхронизации.
Ключи:
- -a: режим архива, позволяет рекурсивно копировать файлы, а также сохраняет символические ссылки, права доступа к файлам, права владения пользователей и групп и временные метки.
- -v: подробный вывод.
- -r: рекурсивно копирует данные (но не сохраняет временные метки и разрешения при передаче данных).
- -z: сжатие данных файла.
- -h: human-readable, информация на выводе в формате, удобном для чтения.