Ответы:
Не с mv.
Основная функция mv(несмотря на название) - переименовать объект. Одна из гарантий, которые дает UNIX, состоит в том, что переименования являются атомарными - вам никогда не разрешат увидеть частично завершенное переименование. Эта гарантия может быть очень полезна, если вы хотите изменить файл ( /etc/passwdнапример), который могут просматривать другие программы, и вы хотите, чтобы они видели либо старую, либо новую версию файла, и никакой другой возможности . Но «рекурсивное переименование», как вы описали, нарушило бы эту гарантию - вы могли бы остановить его в середине, и у вас было бы наполовину перемещенное дерево и, возможно, беспорядок - и поэтому оно не вписывается в философию из mv. Это мое предположение о том, почему mv -rне существует.
(Не важно , что mvперерывы , что философия в других, более мелких способах. Например, на mvсамом деле делает cpсопровождаемым rmпри перемещении файлов из одной файловой системы в другую.)
Достаточно философии. Если вы хотите рекурсивно перемещать («перетаскивать») дерево из одного места в другое в одной и той же файловой системе , вы можете получить эффективность и скорость mvследующим образом (например):
cp -al source/* dest/ && rm -r source/*
-lФлаг cpозначает «создать жесткую ссылку вместо копирования» - это фактически создание нового файла , который указывает на те же данные файла как старого файла. Это работает только на файловых системах, которые поддерживают жесткие ссылки, поэтому любая родная файловая система UNIX подходит, но она не будет работать с FAT.
В &&означает «только выполнить следующую команду , если предыдущая команда успешно». Если хотите, вместо этого вы можете запускать две команды по одной.
Я не думаю, что вы можете повторить поведение перетаскивания, которое вы описываете mv, поскольку непустые подкаталоги в цели не будут заменены.
Возможно rsync? Что то типа rsync -a -r source/ target/? -v -nСначала запустите команду, чтобы выполнить подробный пробный прогон, чтобы убедиться, что он выполняет то, что вам нужно.
Возможно, вы захотите изменить правильный ответ на это:
https://github.com/iaindooley/pickdrop
Пример:
скажи у меня есть:
test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png
и я хочу переместить эти вещи в / сайт
так это выглядит так:
site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png
Я могу идти:
cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop
Это буквально вырезать и вставить.