mv: Dizin boş değil


155

Bir dizinin içeriğini aynı klasörlerle başka bir dizinde taşımak istiyorum.

İşte bir örnek:

Bende ./backupdizinler var baseve test. Şimdi bu dizinleri içeri taşımak istiyorum ./backupArchives.

Bunu kullanıyorum:

mv ./backup/* ./backupArchives

ama hatayı aldım

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

Kullanmayı denedim --forceama şansım yok. Klasörler zaten varken onu taşımanın bir yolu var mı?

Not: Sadece içeriği birleştirmek istiyorum, üzerine yazmak yok.


Klasörlerin içeriğini hedefe birleştirmeye mi çalışıyorsunuz, yoksa hedefteki içeriğin üzerine yazmaya mı çalışıyorsunuz? (Eğer ...... kullanmadan, TÜM hata var veri kesecek eğer o da yardımcı olur)
Thomas Ward

Sadece içeriği birleştirmek istiyorum, üzerine yazmak yok.
UDK

2
Bu işe yarar bile @UdK, bu olacağını unutmayınız değil iki dizin içeriğini birleştirmek. Bir dizini taşımak hedefinin yerine geçecektir. rsyncBunun yerine bir göz atın , birleşme yapacaktır.
zwets

Yanıtlar:


188

Kılavuz sayfası belgeyi belgelemese de, mvhedef dizin dosyalar içeriyorsa, bir dizini başka bir dizine yeniden adlandırmayı reddeder. Bu, sizin durumunuzda iyi bir şey çünkü kaynağın içeriğini hedefte birleştirmek istediğiniz çıkıyor , ki mvbunu yapmayacaksınız.

Yerine rsync -a backup/ backupArchives/kullanın. Ondan sonra rm -rf backup/*.

Kullanmak yerine, rsyncaynı zamanda klasik yapabilirsiniz

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

size daha fazla inek puanı kazandırır.


4
bilmek güzel şeyler! Her ikisi de harika çalışıyor. Teşekkürler!
UdK

5
Geek puanları en iyi puandır: D
MadMike 11:13

2
Bu boş alana klasörün boyutunu gerektiren gerektirir unutulmamalıdır. Ve değilse korkunç sorunlara neden olacaktır.
Pogrindis

4
@Pogrindis Lütfen hangi korkunç sorunların ortaya çıkacağını ve tam bir diske yazma girişimlerinden ne kadar farklı olduklarını açıklayın. Aslında, her iki işlem de orijinal dizini bozulmadan koruduğu için, işlem sizi yalnızca rm -rf backupArchivessonuç vermeden başarısız olursa , “korkunç” olanları bırakın.
zwets

4
Klasik yaklaşımı adlandırdığınız için teşekkür ederiz, rsync mevcut değilse çok yararlı! Ayrıca kullanarak sudo ile çalışırsudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
ArendE

39

Çabuk ve kirli, ne yaptığınızı biliyorsanız:

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

3
Ayrıca güvenli modda çalışır, genious.
Banned_User

4

Taşıdığınız dizinden sonra ihtiyacınız olanları *(herhangi bir metni veya numarayı gösterir). Örneğin:

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

hepsi bu, dosyaları taşıyorsanız, sizden daha çok:

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

Başka bir yol bu klasör içeriğini tar kullanarak paketlemektir:

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

Ardından başka bir dosyaya yerleştirin. Ayrıca bu adımı öneririm, çünkü katran onu sıkıştırır ve boyut olarak küçültür.

Dosyaları başka bir klasöre çıkarmak için

tar -xvzpf /var/www/

Sahip olmadığınız bir yere kopyalamanız gerekiyorsa, sudohangi seçeneği kullanmaya karar verirseniz komutunuzu komutla hazırladığınızdan emin olun .

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

Ubuntu 12.10 kullanıyorum ve anladım: mv: geçersiz seçenek - 'R' Daha fazla bilgi için 'mv - help' deneyin. Gerçekten .tar güzel, ancak bu durumda dosyalarımı nasıl taşıyacağımı bilmem gerekiyor. Yardımınız için teşekkürler
UdK

12.04 masaüstü ve sunucu kullanıyorum ve her ikisinde de iyi çalışıyor. Dikkatli olun, folfer ve -R arasında boşluk bırakmadıysanız. -R olmadan da denedim, benim için de aynı şekilde çalışıyor, -R olmadan deniyorum, ama yazım konusunda dikkatli olun: linux daha küçük ve büyük harflerle çalışıyor !!! yolun hareketli olmaması ya da bir yerden hareket etmesi yanlış. Eğer kullanmak istediğin o klasör yoksa, sadece -C ye koy ve sonra onu yaratacak. ayrıca ilk önce deneyin: Klasörünüzün ismini bulun ve bu komutu root komutundan çalıştırın, hecelenen bir şeyi kaçırırsanız başka bir yerde olup olmadığını kontrol edin. Bana kullandığın emri ver
Dimitris Theodoridis

ne thaaa ..... bu dosya adını ** içine koydu
Dimitris Theodoridis

1
Bu -Rkesinlikle ilk argümandan sonra gelmemeliydi. Seçenekler (neredeyse) her zaman komut bağımsız değişkenlerinden önce gelir. Ayrıca, mvhiçbir -Rseçeneği yoktur ve nihayet, özyineleme a ile ilgisi yoktur mv. @DimitrisTheodoridis lütfen önce cevabınızı test edin.
zwets

evet kardeşim haklısın, her zaman hecelemle ilgili problemlerim var, ve bununla birlikte terminal için sorunum var veya komut bulamadım veya bilmiyorum yeni dosyalar ve dizinler yarattım, sadece basma heceleri için ... cp komutunu kullandı, burada bu kardeş için mv üzgünüm yazdı: D
Dimitris Theodoridis

4

Tabii rsyncişe yarar , ancak bu, desteklemeyen makinelerde de işe yarayabilir rsync(örneğin, rsync varsayılan olarak yüklenmemiş olan cpanel'de).

Ne kullanmaya ne dersiniz:

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

Sonra backupgerekirse dizini kaldırın

Not 1: Sen gerek cdiçin backupyürütmeden önce dizindecp -R --parents ...

Not2: backupArchivesYeni dosyaları yedeklemeniz durumunda dizini iki kez kontrol edin .


1

Soruyu sormadan önce, basitleştirilmiş bir durumu ele alalım.

/ Home / admin dizininde iki klasörümüz olduğunu foove baralt dizin yapısının aynı olduğunu, ancak her birinin içinde farklı dosyalar bulunduğunu varsayalım . Şimdi onları bir araya getirmek istiyoruz. Gibi şeyler yaptığımızda mv foo/* bar, hata mv: directory not emptyoluşur.

Benim çözümüm komut satırı araçlarından vazgeçmek ve örneğin bir yunus gibi bir GUI dosya yöneticisine geçmek. Dolphin fooolarak yeniden adlandırdığınızda bar, hedef klasöre yazma seçeneği sunar ve etkileşimli olarak mevcut dosyaların üzerine yazılıp yazılmayacağını sorar. Bu, tek bir kod satırı olmadan zaman kazanmanızı sağlayan kopyala ve silmeyi önler.

Not: Orada her dosya yöneticisini test etmedim. Ancak çoğu bu özelliğe sahip olmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.