Mv: Каталог не пуст

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

Вот пример:

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

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

mv ./backup/* ./backupArchives

но я получил сообщение об ошибке

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

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

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

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

Воспользуйся rsync -a backup/ backupArchives/ вместо. После этого rm -rf backup/*.

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

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

что приносит вам больше очков гика.

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

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

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

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/

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

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

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

Затем удалите backup каталог, если это необходимо

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

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

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

Предположим, в /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”, он выполнит слияние.

Связанные: directory - Merging folders with mv? - Unix & Linux Stack Exchange

I got into the same situation, i was doing mv <folder_name> ~/ из каталога загрузок и получал сообщение об ошибке: mv: не удается переместить"<folder_name>/' кому '/главная страница/пользователь/<folder_name>': Каталог не пуст, но когда я сделал `mv <folder_name>

Вы просто пытаетесь объединить содержимое папок в пункт назначения или пытаетесь перезаписать то, что находится в пункте назначения. (это также помогает, если у вас есть ПОЛНАЯ ошибка, без использования … для усечения данных)

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