“Rm -rf” ile dizini silmeye çalışıyorum, ancak boş olmadığını belirten bir mesaj alın


36

"Rm -rf" kullanarak bir dizini silmeyi denedim ve "Directory boş değil" mesajını alıyorum:

Bens-MacBook-Pro:please benjaminhocking$ ls -lart empty_directory/
total 16
drwxr-xr-x  5 benjaminhocking  staff  170 Aug 27 14:46 .
drwxr-xr-x  3 benjaminhocking  staff  102 Aug 27 15:28 ..
Bens-MacBook-Pro:please benjaminhocking$ rm -rf empty_directory/
rm: empty_directory/: Directory not empty
Bens-MacBook-Pro:please benjaminhocking$ rmdir empty_directory/
rmdir: empty_directory/: Directory not empty

Finder'ı kullanarak aynı şeyi denersem (klasörü Çöp Kutusuna sürükleyerek), mesajı alıyorum

“Empty_directory” maddesi kullanıldığından işlem tamamlanamıyor.

xattr -d com.apple.quarantineTamamen batıl inançsız bir şey yapmaya çalıştım , ama işe yaramadı.

Muhtemelen önemli bir içerik parçası, bu dizinin başlangıçta Terminal'in beni kilitlemesinden önce verdiğim "temizle" komutuyla silinmesi gereken bir dizinde olmasıydı; Ayrıca Skype ve sonunda işletim sistemi de dahil olmak üzere çalışanlar da kilitlendi. Açma / kapatma tuşunu basılı tutarak bilgisayarı yeniden başlatmak zorunda kaldım.

Eklemek için düzenleyin: Bıraktığım bir diğer önemli bilgi, bunun şifreli bir klasörde olduğu oldu encfs. Nesnelerin şifreli tarafındaki ilgili klasörü bulup orada sildim. Neden normalde yaptığım gibi şeylerin şifrelerinin çözülmediğini neden yapamadığımı hala bilmiyorum. Bunun için iyi bir cevabı varsa diye bu mesajı şimdilik cevapsız bırakacağım.


2
Bu dizinde açık başka bir kabuğunuz var mı, yoksa sadece onu kullanan bir uygulama var mı? "Kullanımda" terimi, (bunu başaramadığımı hiç tecrübe etmeme rmdirrağmen - ancak çoğu zaman, birinin bir cihaza bağlayamamasının nedeni) anlamına da gelebilir .
Izzy,

Bu komutların verildiği sırada değil. Bundan hemen önce tam bir yeniden başlatma yapmıştım.
Ben Hocking

Bazen EncFS ile aynı sorunu yaşıyorum ve şu ana kadar bunun nasıl çözüleceği hakkında hiçbir fikrim yok. Yeni bir şey?
Martin Preusse,

@emempe: Sonunda yaptığım şey, tanımlayıcı olarak son değiştirilen zaman damgasını kullanarak şifreli alandaki klasörü silmek oldu. (Bu tehlikeli olabilir.) Daha iyi bir çözüm bulursam size bildiririm.
Ben Hocking,

@BenHocking: Ben de yapıyorum. Benim için nadiren olur bu yüzden bu konuda iyiyim. Yine de, EncFS'imin bir şekilde bozulduğunu hissetmekten hoşlanmıyorum ...;) EncFS'im bir Dropbox'ta, belki de bir bağlantıda mı?
Martin Preusse,

Yanıtlar:


12

Bilgisayarınızı yeniden başlatın ve rmdir(1)tekrar çalıştırın .

$ rmdir -r empty_directory/

Bu işe yaramazsa, deneyin:

$ rm -rf empty_directory/

Hala çalışmıyorsa, OS X'in lsof(8)önceden yüklenmiş olduğunu varsayarsak , ardından şunu girin:

$ lsof +D empty_directory/

Bu, bu dizindeki dosyaların herhangi bir program tarafından kullanılıp kullanılmadığını söylemelidir. HFS + dosya sisteminin, kullanılan dosyaların silinmesine izin vermediğini düşünüyorum. Neyse, killall(1)bu dizini kullanan herhangi bir yürütülebilir dosya veya içindeki gizli dosyalar. Finder'ın empty_directoryklasör görünümü ayarlarını saklamak için dizinde gizli bir dosya kullanıyor olması muhtemeldir . Bu yardımcı olur umarım.

Not: lsof(8)Yüklü olup olmadığını öğrenmek için , şunu girin:

$ lsof

Çıkış böyle görünüyorsa lsof(8), sisteminize yüklenir.

lsof: /usr/bin/lsof /usr/bin/X11/lsof /usr/share/man/man8/lsof.8.gz

Bu dizindeki gizli ve şifreli dosyaları veya şifreleme anahtarı dosyalarını kontrol edin. Bunlar suçlu olabilir.


4

Disk Yardımcı Programını kullanarak diski onarmak benim için bu sorunu çözdü.


Bu, inandığım senaryoların çoğunda işe yarayacak. Tamamen benim için çalıştı. Thanx
GeekRide

Özel komut, Dosya menüsünün altındaki "İlk Yardım Çalıştır ..." dır. Bunu fark etmeden önce menülerde "tamir" kelimesini aramaya biraz zaman harcadım!
RoG

3

Bu olursa ve her şeyi silmek istediğinizden eminseniz, kullanmayı denemelisiniz sudo rm -rf directory/


1
Bu nedense ~ / .Trash üzerinde çalışmıyor.
MarcusJ

2
Bu sorun aslında izinler olmadığı sürece işe yaramaz, bu da konsola farklı bir hata mesajı olabilir.
tresf

2

Ayrıca bir dizini (rm -r dirname) kaldırmaya çalışırken tam olarak bu hatayı koştum. Bu konuyu bulup bulmadan önce burada okuduğum tüm önerileri çoktan denemiştim. Orijinal sorudan istemeden belirsiz bırakılmış başka noktalar olup olmadığını bilmiyorum, fakat benim durumumda sorunun kökü ve çözümü şuydu:

  • Söz konusu dizin ağa monte bir disk üzerindeydi

  • lsFinder veya komut satırından yapılan herhangi bir girişim hiçbir şey göstermedi .ve..

  • Ağ disk sunucusuna sshkomut ile giriş yaptım ve ls -alorada kontrol ettim . Sonuç, genişletilmiş güvenlik bilgisine sahip çeşitli öğelere ek olarak .ve bunlara ek olarak gösterdi (yani, moda eklenmiş)....__filename+

Bunları olduğuna inanıyoruz, yoksa ilk kullanırken yıl önce yaratma Mac OSX kaydetti dosyalar, benzer cp -R, tarya da cpiodosyaların arşiv veya taşıma gruplarına. Taşınma işleminden sonra bazı dosya özelliklerini düzgün bir şekilde sıfırlamak için kullanıldığında, belki de uid / gid, mode, acls, mtime / utime / ctime, vb; Pek emin değilim - etmişti özellikleri değil o zaman önce bu komutları tarafından doğru sıfırlama alıyor (Ben OSX dahil etmek için kullanılır unutmayın mvmacve cpmacbu önceki komutları soruna çalışmalarına .__filenametür dosyaları olağan formları kullanarak görünmesini başladı cp, tar, vb).

Dahili, USB veya Firewire sürücüsüne yazıldığında bu dosyaları silerken hiçbir zaman sorun yaşamadım; onları ilk defa bir ağ diskinde buldum; Bağlantının istemci tarafından tamamen algılanamaz, ancak sunucu tarafından bakıldığında her şekilde normaldir.

rm -rf dirname Ağ disk sunucusundaki bir oturum açma işleminde dizini, içerikleriyle birlikte düzgün bir şekilde kaldırdı.

Öyleyse, değerinin başka bir cevabı var; Bir ağ diskiyle birlikte herkes için görünmesi gerekiyorsa, bu soruna bir başka potansiyel çözüm.


2

Buradaki cevapların hiçbirini sonuçsuz denedim. Bununla birlikte, devam etmeme izin veren mv komutunu kullanarak dizini bir kenara taşımayı başardım .


2

Benim için çalışan tek çözüm /unix/234876/unable-to-delete-a-file-whatever-i-do’dan geldi :

Onları / tmp'ye taşıyın ve yeniden başlatın.

Denediğim diğer seçenekler şunlardı:

  • Disk Yardımcı Programı - İlk Yardım.
  • lsof +D bad_file çıktı göstermedi.
  • sudo rm -rf
  • Tek kullanıcılı terminale önyükleme ve rm -rf.

1
Tek kullanıcılı terminalinden fsck yardım etmedi, ne de rm -rf, ne lsof +Dgösterir ne olursa. İşin garibi, /tmpyeniden başlattıktan sonra kaldırılmamasına rağmen rahatsız edici direkleri hareket ettirebildim . Aynı sorun devam ediyor, ama en azından biraz yolun dışında.
anapsix

1

Okuyucuların yararı için:

rm -rfBöyle bir durumda dikkat ! Ağ paylaşımı olması durumunda başka bir yerde problem yaratabilir! Uyarıldın!

Neredeyse tüm durumlarda, directoryboş görünüyorsa, kullanın rmdir directoryveya kullanın sudo rmdir directory. Kullanmayın rm(veya delWindows altında). Bu işe yaramazsa, bu isteği engelleyen şeyi bulmanız, düzeltmeniz ve yeniden denemeniz gerekir rmdir.

Lütfen OS-X'i tanımadığımı unutmayın, ancak Unix / BSD davranışına çok benzeyen şeyler olduğunu düşünüyorum.

Söz konusu dizinin sadece bir bağlantı noktası (enkf'lerden) olması veya salt okunan veya bazı uygunsuz durumlarda (dizinin kaldırılmasını engelleyen) sıkışmış bir bağlantı noktası üzerinde bulunması muhtemeldir. Şimdi dizinin kaldırılmasını zorlarsanız, çok kötü şeyler olabilir.

İyi durumda, dizin gerçekten boştu, bu yüzden onu kaldırmak (montajı yok etmek vb.) Başka zarar vermedi. Kötü durumda boş değildi, sadece ortaya çıktı, yani belki de öldürmek istemediğiniz bir şeyi çöpe attınız. Tüm bunlar, hangi sürücülerin kullanımda olduğu, vb. Takma türüne bağlıdır.

Eğer işler makul derecede iyi uygulanırsa, normalde kötü bir şey olmamalıdır. Ancak bu normal bir durum değildir. İşler çoktan garip bir durumda, bu da demek oluyor ki: Bir şeyler yanlış, bu yüzden daha fazla karıştırmaya çalışmayın! Bir şey çatlamışsa, yanlış bir dokunuş kırılabilir.

Örneğin, bir ağ paylaşımında bir yarış koşuluna rm -rfçarptıysanız, başka bir kişi tarafından paylaşıma kopyalanan verileri kaldırmış olabilir .

Ancak rmdir, gerçekten boş dizinleri silmenin yanı sıra, asla zarar vermeyeceği de garanti edilir. Bu NFS için de geçerlidir, çünkü NFS sadece mkdirve rmdirbaşka hiçbir yerde gerçekten atomik davranışları garanti etmez .

Bilginize:

Aracı kullanarak bir bağlama noktası tespit edebilirsiniz mountpoint directory. Alternatif olarak, çıktısının içine bakın mountve oradaki bağlarınızı tespit etmeye çalışın. Ancak dikkat, en azından Linux altında bu yalan olabilir. Kullanımı mountpointdaha güvenilir ama daha az elverişli yarar.

Bu durumda mountpoint'i buldunuz, bağlantısını kaldırabilir ve sonra dizini kaldırabilirsiniz, bu şu sıradır:

umount directory rmdir directory

Gerekirse sudo, her zamanki gibi kullanın .

Notlar:

  • Ağ paylaşımları rmdirerişim haklarından dolayı reddedebilir (ve başka bir şey).

  • Hatalı dosya sistemleri rmdir, başarısız stratejisine bağlı olarak reddedebilir . Belki de bu durumda makul bir mesaj göreceksiniz, belki de değil.

  • Linux altında (ve muhtemelen herhangi bir modern işletim sistemi), farklı araçlar kullanarak erişimi kısıtlayabilirsiniz (bir şeyi salt okunur hale getirmek, SeLinux'taki gibi yetenekler vb.). Bu da demek oluyor ki, bunun bir bağlama noktası olduğunu görmüyorsunuz ve yanlış bir şey görmüyorsunuz, ancak işe yaramıyor. Bu durumda başka bir neden aramanız gerekir ve bu işletim sistemine çok derinde gömülü olabilir. Makul bir hata mesajı görürseniz bu araca bağlıdır. Ayrıca dmesgLinux altında olduğu gibi syslog / kernel-log da bir göz atın (üzgünüm, OS-X eşdeğeri bilmiyorum).

  • Zorunlu dosya kilitlemenin de kaynak olabileceğini unutmayın. Bu Windows'ta normal olsa da, genellikle Unix'in normal durumu değildir ve dizinleri hiç duymadım. Zorunlu dosya kilitleri POSIX kapsamındadır, ancak isteğe bağlıdır.

  • Bu tür durumlarda oldukça sık olarak, söz konusu dizin düşündüğünüzden farklı bir dosya sisteminde bulunur. Hangisini komut ile öğrenebilirsiniz df directory(bunun OS-X altında aynı olduğunu düşünüyorum).

  • Dizinde statveya benzeri araçlarla daha derinlemesine inceleyebilirsiniz statfs. Bununla birlikte, bunlar normal insanlar için biraz düşük seviyededir ve bu tür araçlar genellikle normal kullanıcılardan iyi gizlenir.

  • Dizinler, komik isimler içeren dosyalara sahip olabilir. Hemen çıkış terminali silen bir dosya gibi, bu yüzden orada yok gibi görünüyor. Gibi bir şey deneyin ls -al | lessya da MidnightCommander gibi bir şey kullanın mc.

Böcekler, yabancılar, uzaylılar veya belki de periler gibi daha egzotik şeyler dahil olmak üzere başka olasılıkların tren yükü vardır. Ama genellikle oraya bakmaya başlamak akıllıca değildir, bunun yerine ilk önce yanınızdaki hatayı bulmaya çalışın, çünkü "errare humanum est".


1

Bu aynı zamanda, yeni çözülmüş bir bağlantının sunucu tarafında olduğu ve müşteriye CIFS üzerinden görünmediği bir çözüm olabilir. İşaret bağlantısı boş olmayan bir dizini doldurdu, ancak istemci dizinin bağlantısını kaldırmadan önce dizini temizlemek amacıyla bağlantıyı göremedi ya da bulamadı. Görünmez olduğu için, müşteri tarafından boş olduğu, ancak rm tarafından zorlandığında "boş olmadığı" bu paradoksu yarattı . Sunucuya SSH erişiminiz varsa, bu uçta bir kabuk deneyin ve dizinin gerçekten boş olup olmadığını veya bağlantının kopmuş olup olmadığını görün. Bunu bir Drobo5N'de yapabildim ve kıçımı kurtardı.


Bu, benzer durumlarda başkaları için de faydalı olabilir, ancak o zaman hiçbir sunucuya bağlı olmadığım için kesinlikle benim için durum böyle değildi.
Ben Hocking,

0

Bu dizini Windows'dan açmayı deneyin, Mac OS'de gösterilmeyen bir şey olabilir. Mac ile Win PC arasında bir dizi kopyalama işleminden sonra benzer bir sorun yaşadım: Dizin terminalde bile boştu ancak Windows'ta gizli bir windows dosyası buldum, bu yüzden dizini oradan başarıyla kaldırdım.


0

Terminalde:

  1. enter sudo su (Komut satırı istemi gibi bir şeye geçmeli sh-3.2#.)
  2. silmek istediğiniz klasörün ana klasörüne gidin
  3. girmek rm -rf TheDirectoryYouWantToDelete

0

Bir Uygulamanın kullandığı bir klasörü silmeye çalışırken bu sorunla karşılaştım. Uygulamayı kapattığımda, bu hatayı atmadan klasörü kaldırmama izin verdi, bu yüzden onu kullanabilecek olan Uygulamalardan çıkmayı deneyin.

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.