Как переместить все файлы и подкаталоги из одной папки в другую? Команда mv не перемещает ни один подкаталог

Как переместить все файлы и подкаталоги из одной папки в другую? Команда mv не перемещает ни один подкаталог

Я просто хочу переместить и перезаписать все файлы и папки, включая все подкаталоги и их файлы, в другую папку и ее подпапки.

Я попробовал следующие команды, но они не работают с подкаталогом и его файлами.

mv -f fromA/* toB/

mv -f fromA/{,.}* toB/

Таким образом, все файлы из папки A перемещаются в папку B, но не из A/sub в B/sub.

Я получаю сообщение об ошибке «Невозможно переместить 'fromA/subA' в 'toB/subB'»: Файл существует

Это работает, если я прохожу по каждой папке по одной, но я уверен, что я что-то упускаю. Я видел большинство, если не все, связанных ответов, но ни один из них не работает здесь.

решение1

info mvесть это:

   _Note_: 'mv' will only replace empty directories in the destination.
Conflicting populated directories are skipped with a diagnostic.

Похоже, что нет возможности отменить это. Либо удалите B и переименуйте A (обратно в B), либо сначала вручную очистите/удалите каталоги в B.

решение2

Я рекомендую использоватьrsync

С помощью rsync вы можете указать, какие файлы вы хотите удалить, и даже выполнить «пробный запуск», чтобы увидеть, что произойдет, если вы запустите его по-настоящему.

Пытаться

rsync -av --dry-run --delete-before fromA toB

--delete-before отлично подходит для слияния файлов в системах с небольшим количеством места. Если вас устраивает пробный запуск, удалите эту --dry-runопцию.

Я рекомендую просмотреть страницу руководства, чтобы увидеть все возможные варианты «удаления», и решить, какой из них подойдет вам лучше всего.

Если вы хотите удалить все файлы в месте назначения, которые не связаны с перемещением, вы можете использовать опцию --delete-excluded. Опять же, используйте --dry-runдля проверки того, что будет удалено, перед запуском.

Есть , --remove-source-filesкоторый удалит исходные файлы во время передачи (как mv), но он не удаляет каталоги. Так что вам все равно придется удалить исходные каталоги с помощьюrm

решение3

На основании вашего утверждения, что вы получаете ошибку, что файл уже существует, у вас уже есть папки и файлы в 'toB'? Если вы в основном хотите объединить файлы из 'fromA' в 'toB', то вам, вероятно, лучше всего просто скопировать файлы рекурсивно (cp -ar), а затем удалить 'fromA'.

В противном случае, если «toB» изначально должен быть пустым и вы просто хотите убедиться, что содержимое «toB» совпадает с «fromA»:

$ rm -rf toB
$ mv fromA toB

Связанный контент