Хотя его справочная страница не документирует это, mv откажется переименовывать каталог в другой каталог, если целевой каталог содержит файлы. Это хорошо в вашем случае, потому что вы, оказывается, хотите поглощать содержимое источника в цель, которая mv не годится.
Воспользуйся rsync -a backup/ backupArchives/ вместо. После этого rm -rf backup/*.
Вместо того, чтобы использовать rsync, вы также можете выполнить классическую
(cd backup && tar c .) | (cd backupArchives && tar xf -)
После того, как каталог, который вы перемещаете, вам нужно * (представляет любой текст или число). Например:
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 команда после того, какой вариант вы решите использовать.
Прежде чем задать вопрос, давайте рассмотрим упрощенный случай.
Предположим, в /home/admin у нас есть две папки foo и bar которые имеют одинаковую структуру подкаталогов, но каждый из них содержит в себе разные файлы. Теперь мы хотим объединить их в одно целое. Когда мы делаем такие вещи, как mv foo/* bar, ошибка mv: directory not empty происходит.
Мое решение состоит в том, чтобы отказаться от инструментов командной строки и переключиться на графический файловый менеджер, например, dolphin. Когда вы переименовываете foo к bar в dolphin он дает вам возможность выполнять запись в папку назначения и запрашивает, следует ли перезаписывать существующие файлы в интерактивном режиме. Это позволяет избежать копирования и удаления, что, по сути, экономит ваше время без единой строки кода.
PS: Я не тестировал все существующие файловые менеджеры. Но большинство из них должны иметь эту функцию.
Мне пришлось скопировать очень большой каталог с большим количеством больших файлов, поэтому я создал жесткие ссылки к исходным файлам в целевом каталоге следующим образом:
cp -al ./backup/* ./backupArchives
Затем я удалил оригиналы, оставив только одну жесткую ссылку на каждый файл.
Поскольку жесткие ссылки достаточно экономичны в пространстве, вы можете даже использовать жесткие ссылки для копирования backupArchives и backup каталоги в новое пробное местоположение и убедитесь, что количество файлов соответствует вашим ожиданиям, как при фиктивном запуске. Это предполагает, что ваша файловая система поддерживает жесткие ссылки - ext4 поддерживает.
При перемещении каталога во время выполнения скрипта, вам необходимо учитывать несуществующие или пустые каталоги, а также принудительное переопределение и удаление без подтверждения:
# If old directory exists, and isn't emptyif [[ -d old_dir ]] && [[ -n `ls -A old_dir` ]] ; then # Make a new directory (skip if already exists) mkdir -p new_dir # Copy all files to the new directory (-afr : Keep attributes, Force overwrite, Recursive copy) cp -afr old_dir/* new_dir/ # Remove old directory rm -rf old_dirfi
@UdK Даже если это сработает, обратите внимание, что это ** не ** объединит содержимое двух каталогов. Перемещение каталога приведет к замене его целевого объекта. Вместо этого взгляните на “rsync”, он выполнит слияние.
I got into the same situation, i was doing mv <folder_name> ~/ из каталога загрузок и получал сообщение об ошибке: mv: не удается переместить"<folder_name>/' кому '/главная страница/пользователь/<folder_name>': Каталог не пуст, но когда я сделал `mv <folder_name>
Вы просто пытаетесь объединить содержимое папок в пункт назначения или пытаетесь перезаписать то, что находится в пункте назначения. (это также помогает, если у вас есть ПОЛНАЯ ошибка, без использования … для усечения данных)