Вопрос mv: каталог не пуст


Я хочу переместить содержимое каталога в другой каталог с теми же папками.

Вот пример:

у меня есть ./backup у которых есть каталоги base а также test, Теперь я хочу переместить эти каталоги в ./backupArchives,

Я использую это:

mv ./backup/* ./backupArchives

но я получил ошибку

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

Я попытался использовать --force, но не повезло. Есть ли способ переместить его, когда папки уже существуют?

Примечание. Я просто хочу объединить содержимое, нет перезаписи.


124
2018-03-19 04:11


происхождения


Вы просто пытаетесь объединить содержимое папок в пункт назначения или пытаетесь переписать то, что находится в пункте назначения. (это также помогает, если у вас есть ПОЛНАЯ ошибка, без использования ...... для усечения данных) - Thomas Ward♦
Я просто хочу объединить содержимое, нет перезаписи. - UdK
@UdK Даже если это сработает, обратите внимание, что это не объединить содержимое двух каталогов. Перемещение каталога заменит его цель. Посмотри на rsync вместо этого он будет выполнять слияние. - zwets


ответы:


Хотя его справочная страница не документирует его, mv откажется переименовать каталог в другой каталог, если целевой каталог содержит файлы. Это хорошо в вашем случае, потому что вы хотите сливаться содержание источника в цель, которое mv не будет.

использование rsync -a backup/ backupArchives/ вместо. После этого rm -rf backup/*,

Вместо того, чтобы использовать rsync, вы также можете сделать классический

(cd backup && tar c .) | (cd backupArchives && tar xf -)

который зарабатывает вам больше очков выродка.


159
2018-03-19 07:51



хорошие вещи, чтобы знать! Оба работают отлично. Благодаря! - UdK
Очки Geek - лучшие очки: D - MadMike
следует отметить, что для этого требуется, чтобы размер папки находился в свободном пространстве. И вызовет ужасные проблемы, если нет. - Pogrindis
@Pogrindis Пожалуйста, объясните, что какой ужас проблемы будут возникать и как они отличаются от любой другой попытки записать на полный диск? Действительно, поскольку обе операции сохраняют исходный каталог неповрежденным, если операция не выполняется, вы просто rm -rf backupArchives без последствий, не говоря уже о «ужасных». - zwets
Спасибо, что назвали классический подход, очень полезно, если rsync недоступен! Также работает с использованием sudo sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)' - ArendE


Быстро и грязно, если вы знаете, что делаете:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*

24
2017-10-10 16:07



Также работает в моем безопасном режиме, гениальный. - Banned_User


После того, как вы перемещаете каталог * (представляет любой текст или номер). Например:

mv /var/www/* /recovery/wwwrecovery/

все, если вы перемещаете файлы, чем вы перемещаете как:

mv /var/www/index.php /recovery/index.php

Другой способ - упаковать содержимое этой папки, используя tar:

tar -cvzpf backup.tar.gz /var/www 

Затем переместите его в другой файл. Также я рекомендую этот шаг, потому что tar сжимает его и уменьшает его размер.

Чтобы извлечь файлы в другую папку, используйте

tar -xvzpf /var/www/

Если вам нужно скопировать место, в котором вы не являетесь, обязательно добавьте свою команду в sudo после того, какой вариант вы решите использовать.

sudo tar -cvzpf backup.tar.gz /var/www/

3
2018-03-19 04:27



Я использую Ubuntu 12.10, и я получил: mv: недопустимый вариант - 'R' Try `mv --help 'для получения дополнительной информации. Действительно., Это приятно, но мне нужно знать, как переместить мои файлы для этой ситуации. Спасибо за вашу помощь - UdK
я использую рабочий стол 12.04 и сервер, и в обоих работает хорошо. будьте осторожны, если вы не сделали пробел betwen folfer и -R. Я также пробовал без -R работает для меня так же, попробуйте без -R, но будьте осторожны с орфографией: linux имеет дело с нижними и прописными буквами !!! чем в случае, если путь связан с перемещением или перемещением из местоположения. если у вас нет этой папки, которую вы wana переместите, просто поместите -C после нее, и она ее создаст. также попробуйте сначала: find -iname имя вашей папки  и запустите эту команду от root, просто чтобы убедиться, что она существует в другом месте, если вы пропустили что-то прописанное. дайте мне точную команду, которую вы использовали - Dimitris Theodoridis
какой thaaa ..... поставить это имя файла в betwen ** - Dimitris Theodoridis
Что -R конечно, не следует начинать после первого аргумента. Параметры (почти) всегда предшествуют аргументам команды. Также, mv не имеет -R вариант, и, наконец, рекурсия не имеет отношения к mv, @DimitrisTheodoridis, пожалуйста, сначала проверьте свой ответ. - zwets
да, мой брат, вы правы, у меня всегда есть проблемы с моей орфографией, и всегда у меня проблема с терминалом для этого или команды, не найденной или создающей новые файлы и каталоги, которые я не знаю, просто для написания балов ... кстати, я использовала команду cp, чем здесь написала mv sory для этого брата: D - Dimitris Theodoridis


Конечно rsync работает, но это может работать и для машины, которая не поддерживает rsync (например, в cpanel, который по умолчанию не установлен rsync).

Как насчет использования:

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

Затем удалите backup если необходимо

Примечание1: вам необходимо cd к backup перед выполнением cp -R --parents ... 

Примечание2: дважды проверьте backupArchives если вы получили новые файлы из резервной копии.


3
2018-03-03 07:45





Прежде чем задать вопрос, давайте рассмотрим упрощенный случай.

Предположим, что в / home / admin у нас есть две папки foo а также bar которые имеют одну и ту же структуру подкаталогов, но каждый из них содержит в себе разные файлы. Теперь мы хотим объединить их в один. Когда мы делаем что-то вроде mv foo/* bar, Ошибка mv: directory not empty имеет место.

Мое решение состоит в том, чтобы отказаться от инструментов командной строки и переключиться на файловый менеджер графического интерфейса, например, дельфин. Когда вы переименуете foo в bar в дельфине он дает вам возможность записывать в папку назначения и спрашивает, нужно ли перезаписывать существующие файлы в интерактивном режиме. Это позволяет избежать копирования и удаления, что фактически экономит ваше время без единой строки кода.

PS: Я не тестировал каждый файловый менеджер там. Но у большинства из них должна быть эта функция.


1
2017-10-12 09:22