В среде графического интерфейса, перетаскивание с заменой заменит файлы и целые каталоги (включая содержимое) тем, что копируется. Есть ли способ добиться такого же интуитивного результата с помощью команды 'mv'?
источник
В среде графического интерфейса, перетаскивание с заменой заменит файлы и целые каталоги (включая содержимое) тем, что копируется. Есть ли способ добиться такого же интуитивного результата с помощью команды 'mv'?
Не с 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
Сначала запустите команду, чтобы выполнить подробный пробный прогон, чтобы убедиться, что он выполняет то, что вам нужно.источник
mv -f /path/to/source/folder/* /destination/folder/
Переместит все в / path / в / source / папку, включая файлы и каталоги в / destination / folder.
И будет перезаписывать существующие файлы и каталоги.
источник
Возможно, вы захотите изменить правильный ответ на это:
https://github.com/iaindooley/pickdrop
Пример:
скажи у меня есть:
и я хочу переместить эти вещи в / сайт
так это выглядит так:
Я могу идти:
Это буквально вырезать и вставить.
источник