Ответы:
Не с 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
Это буквально вырезать и вставить.