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

103

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

Вот пример:

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

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

mv ./backup/* ./backupArchives

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

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

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

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

    
задан UdK 19.03.2013 в 04:11
источник

5 ответов

139

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

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

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

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

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

    
ответ дан zwets 19.03.2013 в 07:51
источник
22

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

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
    
ответ дан patrickvacek 10.10.2013 в 16:07
3

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

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

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

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/
    
ответ дан Dimitris Theodoridis 19.03.2013 в 04:27
2

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

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

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

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

Примечание1. Перед выполнением cd

вам необходимо backup в каталоге cp -R --parents ... .

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

    
ответ дан Atillo Regner Rex 03.03.2017 в 07:45
1

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

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

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

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

    
ответ дан navigaid 12.10.2016 в 09:22

Ознакомьтесь с другими вопросами по меткам