mv: Каталог не порожній


155

Я хочу перемістити вміст каталогу в інший каталог з тими ж папками.

Ось приклад:

Я маю ./backupкаталоги baseта test. Тепер я хочу перемістити ці каталоги в ./backupArchives.

Я використовую це:

mv ./backup/* ./backupArchives

але я отримав помилку

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

Я спробував використовувати --force, але не пощастило. Чи є спосіб перемістити його, коли папки вже є?

Примітка. Я просто хочу злити вміст, перезапису немає.


Ви просто намагаєтесь об'єднати вміст папок із пунктом призначення чи ви намагаєтесь перезаписати те, що є в пункті призначення. (це також допомагає, якщо ви маєте ЦІЛЬНУ помилку, не використовуючи ...... для обрізання даних)
Thomas Ward

Я просто хочу злити вміст, перезапису немає.
УдК

2
@UdK Навіть якщо це не спрацювало, зауважте, що це не з’єднує вміст двох каталогів. Переміщення каталогу замінить його ціль. Подивіться rsyncнатомість, це зробить злиття.
zwets

Відповіді:


188

Хоча його mvдовідкова сторінка не документує, вона відмовиться перейменовувати каталог в інший каталог, якщо цільовий каталог містить файли. Це добре у вашому випадку, оскільки ви виявите, що хочете об'єднати вміст джерела в ціль, що mvне зробить.

Використовуйте rsync -a backup/ backupArchives/замість цього. Після цього rm -rf backup/*.

Замість використання rsyncви також можете робити класичне

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

що заробляє більше очок на вигляд.


4
приємні речі знати! Обидва працюють чудово. Дякую!
УдК

5
Найкращі бали у Geek: D
MadMike

2
Слід зазначити, що для цього потрібно мати вільний розмір папки. І викличе жахливі проблеми, якщо ні.
Pogrindis

4
@Pogrindis Поясніть, будь ласка, які жахливі проблеми будуть виникати та чим вони відрізняються від будь-якої іншої спроби запису на повний диск? Дійсно, оскільки обидві операції зберігають початковий каталог неушкодженим, якщо ця операція виходить з ладу просто rm -rf backupArchivesбез наслідків, не кажучи вже про «жахливі».
zwets

4
Дякуємо, що назвали класичний підхід, дуже корисно, якщо rsync недоступний! Також працює з використанням sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
судо


4

Після переміщення потрібного каталогу *(представляє будь-який текст чи цифру). Наприклад:

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

ось все, якщо ви переміщуєте файли, ніж ви рухаєтесь так:

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

Інший спосіб - запакувати цей вміст папки за допомогою tar:

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

Потім перемістіть його на будь-який інший файл. Також рекомендую цей крок, оскільки дьоготь стискає його і робить його меншими за розміром.

Щоб витягнути файли, використовуйте іншу папку

tar -xvzpf /var/www/

Якщо вам потрібно скопіювати місце, де ви не є власником, переконайтесь, що ви додали команду до sudoкоманди після того, який варіант ви вирішите використовувати.

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

Я використовую Ubuntu 12.10, і я отримав: mv: invalid option - 'R' Спробуйте `mv --help 'для отримання додаткової інформації. Дійсно .tar приємно, але мені потрібно знати, як перемістити свої файли для цієї ситуації. Дякуємо за вашу допомогу
UdK

Я використовую робочий стіл та сервер 12.04 і в обох працює добре. будьте обережні, якщо ви не зробили простір між людьми та -R. Я також пробував без -R працює однаково для мене, спробуйте без -R, але будьте обережні з написанням: Linux має значення малі та великі літери !!! ніж якщо шлях невірно рухаєтьсязвідки або рухаєтьсявід місця розташування. якщо у вас немає тієї папки, яку ви перейдете до просто -C після неї, і вона створить її. також спробуйте спочатку: знайдіть ім'я назви вашої папки та запустіть цю команду з root, просто щоб побачити, чи існує вона в іншому місці, якщо ви пропустите щось написано дайте мені точну команду, яку ви використовували
Димитріс Теодорідіс

що thaaa ..... помістити це ім'я файлу в betwen **
Димитріс Теодорідіс

1
Це, -Rбезумовно, не повинно прийти після першого аргументу. Опції (майже) завжди передують аргументам команд. Крім того, mvнемає жодної -Rможливості, і, нарешті, рекурсія не має значення для a mv. @DimitrisTheodoridis спочатку перевірте свою відповідь.
zwets

так, мій брато, ти маєш рацію, у мене завжди є проблеми зі своїм написанням, і завжди я маю проблеми з терміналом для цього чи командою не знайдено або створити нові файли та каталоги, які я не знаю, лише для правопису бази ... до речі я використав команду cp, ніж тут написав mv sory для того брата: D
Димитріс Теодорідіс

4

Звичайно, rsyncце працює, але це може працювати і для машини, яка не підтримує rsync(тобто в cpanel, який rsync не встановлений за замовчуванням).

Як щодо використання:

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

Потім backupпри необхідності видаліть каталог

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

Примітка2: Перевірте backupArchivesкаталог, якщо ви отримали нові файли із резервної копії.


1

Перш ніж задавати питання, давайте розглянемо спрощений випадок.

Припустимо , що в / головна / адмін у нас є дві папки fooі barякі мають ту ж структуру підкаталогів, але кожен з яких містить різні файли в ньому. Тепер ми хочемо об'єднати їх в одне ціле. Коли ми робимо такі речі mv foo/* bar, помилка mv: directory not emptyвиникає.

Моє рішення - відмовитися від інструментів командного рядка і перейти до менеджера файлів GUI, наприклад, дельфіна. При перейменування fooдо barв дельфіні, це дає вам можливість записувати в папку призначення, і питає , потрібно чи перезаписувати існуючі файли, в інтерактивному режимі . Це дозволяє уникнути копіювання та видалення, що фактично економить ваш час без жодного рядка коду.

PS: Я не перевіряв кожного файлового менеджера там. Але більшість із них повинна мати цю особливість.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.