Відповіді:
Не з 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
Це буквально вирізати та вставити.