Đang cố gắng xóa thư mục với bản rm -rf, nhưng nhận được thông báo rằng nó không trống


36

Tôi đã thử xóa một thư mục bằng cách sử dụng "rm -rf" và tôi nhận được thông báo "Thư mục không trống":

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

Nếu tôi thử điều tương tự bằng Finder (kéo thư mục vào Thùng rác), tôi nhận được thông báo

Thao tác không thể hoàn thành vì mục trống rỗng_directory 'đang được sử dụng.

Tôi đã thử làm xattr -d com.apple.quarantine, hoàn toàn không mê tín, nhưng nó không tốt.

Một bối cảnh có lẽ quan trọng là thư mục này ban đầu nằm trong một thư mục cần được xóa bằng lệnh "làm sạch" mà tôi đã ban hành trước khi Terminal khóa với tôi, sau đó hơn một nửa các chương trình khác tôi có chạy cũng bị khóa, bao gồm cả Skype và cuối cùng là hệ điều hành. Cuối cùng tôi đã phải khởi động lại máy tính bằng cách nhấn và giữ phím nguồn.

Chỉnh sửa để thêm: Một thông tin quan trọng khác mà tôi đã để lại là điều này đã xảy ra trong một thư mục được mã hóa à la encfs. Tôi đã có thể theo dõi thư mục tương ứng trong phần được mã hóa và xóa nó ở đó. Tôi vẫn không biết tại sao tôi không thể làm điều đó từ khía cạnh được giải mã của những thứ như tôi thường làm. Bây giờ tôi sẽ để lại câu trả lời này trong trường hợp bất cứ ai có câu trả lời tốt cho điều đó.


2
Bạn có bất kỳ shell nào khác mở trong thư mục này hoặc một ứng dụng đang chạy chỉ sử dụng nó không? Thuật ngữ "đang sử dụng" cũng có thể có nghĩa là (mặc dù tôi chưa bao giờ trải nghiệm việc không thể sử dụng rmdirnó - nhưng nó thường là nguyên nhân khiến người ta không thể ngắt kết nối một tập).
Izzy

Không phải tại thời điểm những lệnh cụ thể đã được ban hành. Tôi đã thực hiện khởi động lại hoàn toàn ngay trước đó.
Ben Hocking

Đôi khi tôi có cùng một vấn đề với EncFS và cho đến nay tôi không biết làm thế nào để giải quyết vấn đề này. Bất cứ điều gì mới?
Martin Preusse

@emempe: Điều cuối cùng tôi đã làm là xóa thư mục trong không gian được mã hóa, sử dụng dấu thời gian được sửa đổi lần cuối làm định danh của tôi. (Điều này có thể nguy hiểm.) Nếu tôi đưa ra một giải pháp tốt hơn, tôi sẽ cho bạn biết.
Ben Hocking

@BenHocking: Tôi cũng làm vậy. Xảy ra hiếm khi xảy ra với tôi vì vậy tôi ổn với điều này. Tuy nhiên, tôi không thích cảm giác rằng EncFS của tôi bị hỏng bằng cách nào đó ...;) EncFS của tôi nằm trong Dropbox, có thể là một số kết nối?
Martin Preusse

Câu trả lời:


12

Khởi động lại máy tính của bạn và chạy rmdir(1)lại.

$ rmdir -r empty_directory/

Nếu điều đó không hiệu quả, hãy thử:

$ rm -rf empty_directory/

Nếu nó vẫn không hoạt động, giả sử OS X đã lsof(8)được cài đặt sẵn, hãy nhập:

$ lsof +D empty_directory/

Điều này sẽ cho biết nếu bất kỳ tập tin trong thư mục này đang được sử dụng bởi bất kỳ chương trình. Tôi nghĩ rằng hệ thống tệp HFS + không cho phép xóa các tệp đang sử dụng. Dù sao, killall(1)bất kỳ thực thi nào có thể đang sử dụng thư mục này hoặc bất kỳ tập tin ẩn bên trong nó. Có khả năng Finder đang sử dụng một tệp ẩn trong empty_directorythư mục để lưu các cài đặt xem thư mục. Hi vọng điêu nay co ich.

PS: Để tìm hiểu xem đã lsof(8)được cài đặt chưa, hãy nhập:

$ lsof

Nếu đầu ra trông như thế này, thì lsof(8)được cài đặt trên hệ thống của bạn.

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

Kiểm tra bất kỳ tập tin ẩn và mã hóa hoặc tập tin khóa mã hóa trong thư mục đó. Đây có thể là thủ phạm.


4

Sửa chữa đĩa bằng Disk Utility đã khắc phục sự cố này cho tôi.


Điều này sẽ làm việc trong hầu hết các kịch bản tôi tin. Hoàn toàn làm việc cho tôi. Thanx
GeekRide

Lệnh cụ thể là "Chạy Sơ cứu ..." trong menu Tệp. Tôi đã dành một chút thời gian dài để tìm kiếm trong các menu cho từ "sửa chữa" trước khi tôi nhận ra điều đó!
RoG

3

Nếu điều này xảy ra và bạn chắc chắn muốn xóa mọi thứ, bạn nên thử sử dụng sudo rm -rf directory/


1
Điều này không hoạt động trên ~ / .Trash vì một số lý do.
MarcusJ

2
Điều này thực sự không hoạt động trừ khi vấn đề là quyền, đó sẽ là một thông báo lỗi khác với bảng điều khiển.
tresf

2

Tôi đã gặp phải chính xác lỗi này trong khi cũng cố gắng xóa một thư mục (rm -r dirname). Tôi đã thử tất cả các đề xuất mà tôi đã đọc ở đây trước khi tôi tìm kiếm và tìm thấy chủ đề này. Tôi không biết liệu có thể có bất kỳ điểm bổ sung nào vô tình bỏ qua câu hỏi ban đầu hay không, nhưng trong trường hợp của tôi, gốc rễ của rắc rối, và giải pháp là:

  • thư mục trong câu hỏi là trên một đĩa gắn trên mạng

  • mọi lscố gắng từ Finder hoặc dòng lệnh không cho thấy gì ngoài ...

  • Tôi đăng nhập vào máy chủ đĩa mạng thông qua sshlệnh và kiểm tra ls -alở đó. Kết quả cho thấy, ngoài ..., một số .__filenamemục có thông tin bảo mật mở rộng (nghĩa là được +gắn vào chế độ).

Tôi tin rằng đây là những, hoặc tương tự như, các file mà tôi lần đầu tiên ghi nhận Mac OSX tạo năm trước khi sử dụng cp -R, tarhoặc cpiocho các nhóm lưu trữ hoặc di chuyển các tập tin. Tôi đã suy luận tại thời điểm chúng được sử dụng để đặt lại đúng một số thuộc tính tệp sau khi di chuyển - có thể là uid / gid, mode, acls, mtime / utime / ctime, v.v; Tôi không thực sự chắc chắn - các thuộc tính không được thiết lập lại chính xác bởi các lệnh đó trước đó (Tôi nhớ rằng OSX được sử dụng để bao gồm mvmaccpmaccác lệnh để khắc phục sự cố trước khi các .__filenameloại tệp này bắt đầu xuất hiện khi sử dụng các dạng thông thường của cp, tar, v.v.)

Tôi chưa bao giờ gặp sự cố khi xóa các tệp này khi chúng được ghi vào ổ đĩa trong, USB hoặc Firewire; đây là lần đầu tiên tôi tìm thấy chúng trên đĩa mạng; hoàn toàn không thể phát hiện từ phía máy khách của mount, nhưng bình thường theo mọi cách khi nhìn từ phía máy chủ.

rm -rf dirname từ một đăng nhập trên máy chủ đĩa mạng đã loại bỏ đúng thư mục cùng với nội dung của nó.

Vì vậy, có một câu trả lời khác cho những gì nó có giá trị; một giải pháp tiềm năng khác cho vấn đề này nếu nó xuất hiện cho bất kỳ ai kết hợp với đĩa mạng.


2

Đã thử tất cả các câu trả lời ở đây mà không có kết quả. Tuy nhiên, tôi đã có thể di chuyển thư mục sang một bên bằng lệnh mv , cho phép tôi tiếp tục.


2

Giải pháp duy nhất hiệu quả với tôi là từ https://unix.stackexchange.com/questions/234876/unable-to-delete-a-file-whthing-i-do :

Di chuyển chúng đến / tmp và khởi động lại.

Các tùy chọn khác tôi đã thử là:

  • Tiện ích đĩa - Sơ cứu.
  • lsof +D bad_file cho thấy không có đầu ra.
  • sudo rm -rf
  • Khởi động vào thiết bị đầu cuối người dùng duy nhất và rm -rf.

1
Fsck từ thiết bị đầu cuối một người dùng đã không giúp đỡ, cũng không rm -rf, cũng không lsof +Dhiển thị bất cứ điều gì. Điều kỳ lạ là tôi đã có thể chuyển các thư mục vi phạm sang /tmp, mặc dù nó không bị xóa sau khi khởi động lại. Vấn đề tương tự vẫn còn, nhưng ít nhất nó cũng phần nào tránh được.
anapsix

1

Vì lợi ích của độc giả:

Hãy coi chừng rm -rftrong trường hợp như vậy! Nó có thể tạo ra vấn đề ở một nơi khác trong trường hợp nó xảy ra là chia sẻ mạng! Bạn đa được cảnh bao!

Trong gần như tất cả các trường hợp, nếu một directorydường như trống rỗng, sử dụng rmdir directoryhoặc có lẽ sudo rmdir directory. Không sử dụng rm(hoặc deldưới Windows). Nếu điều này không hoạt động, bạn cần tìm hiểu, cái gì chặn yêu cầu này, sửa nó và sau đó thử lại rmdir.

Xin lưu ý rằng tôi không biết OS-X, nhưng tôi nghĩ mọi thứ ở đó rất giống với hành vi của Unix / BSD.

Rất có khả năng thư mục được đề cập chỉ là một điểm gắn kết (từ các bảng mã) hoặc nằm trên một điểm gắn kết trở nên chỉ đọc hoặc bị mắc kẹt trong một số trạng thái không chính xác (khiến thư mục bị xóa). Nếu bây giờ bạn buộc loại bỏ thư mục, những điều rất xấu có thể xảy ra.

Trong trường hợp tốt, thư mục thực sự trống, vì vậy việc loại bỏ nó (phá hủy mount, v.v.) không gây hại gì thêm. Trong trường hợp xấu, nó không trống rỗng, có vẻ như là vậy, điều đó có nghĩa là, bạn đã bỏ đi thứ gì đó mà có lẽ bạn không muốn giết. Tất cả điều này phụ thuộc vào loại gắn kết, trình điều khiển nào đang được sử dụng, vv Trang.

Nếu mọi thứ được thực hiện hợp lý tốt, thông thường không có gì xấu xảy ra. Tuy nhiên đây không phải là trường hợp bình thường. Mọi thứ đã ở trong một trạng thái kỳ lạ, điều đó có nghĩa là: Có gì đó không ổn, vì vậy tốt hơn đừng cố gắng trộn nó thêm nữa! Nếu một cái gì đó bị nứt, bất kỳ liên lạc sai có thể phá vỡ nó.

Ví dụ: nếu bạn đạt điều kiện cuộc đua trên chia sẻ mạng, có thể bạn rm -rfsẽ xóa dữ liệu vừa được sao chép vào chia sẻ bởi người khác.

Tuy nhiên rmdirđược đảm bảo không bao giờ làm hại, bên cạnh việc loại bỏ các thư mục thực sự trống rỗng. Điều này thậm chí đúng trên NFS, bởi vì NFS chỉ đảm bảo hành vi nguyên tử thực sự trên mkdirrmdir, nhưng không ở đâu khác.

Tài chính

Bạn có thể phát hiện một điểm gắn kết bằng cách sử dụng công cụ mountpoint directory. Hoặc nhìn vào đầu ra mountvà cố gắng phát hiện ra thú cưỡi của bạn ở đó. Nhưng hãy cẩn thận, ít nhất là trong Linux, điều này có thể nói dối. Sử dụng mountpointtiện ích đáng tin cậy hơn nhưng ít thuận tiện hơn.

Trong trường hợp đó bạn đã tìm thấy mountpoint, bạn có thể ngắt kết nối nó và sau đó xóa thư mục, đây là trình tự sau:

umount directory rmdir directory

Nếu cần sử dụng sudo, như bình thường.

Ghi chú:

  • Chia sẻ mạng có thể từ chối rmdir(và bất cứ điều gì khác) do quyền truy cập.

  • Hệ thống tập tin bị lỗi có thể từ chối rmdir, tùy thuộc vào chiến lược thất bại. Có lẽ bạn sẽ thấy một thông điệp hợp lý trong trường hợp đó, có lẽ là không.

  • Trong Linux (và có lẽ là bất kỳ HĐH hiện đại nào), bạn cũng có thể hạn chế quyền truy cập bằng các phương tiện khác nhau (như gắn một thứ gì đó chỉ đọc, các khả năng như trong SeLinux, v.v.). Điều này có nghĩa là bạn không thấy rằng đó là một điểm gắn kết và bạn không thấy có gì sai, nhưng nó không hoạt động. Trong trường hợp đó, bạn cần tìm kiếm một số lý do khác và nó có thể bị chôn vùi rất sâu trong HĐH. Nó phụ thuộc vào công cụ nếu bạn thấy một số thông báo lỗi hợp lý. Cũng có thể xem xét nhật ký syslog / kernel như dmesgtrong Linux (xin lỗi, tôi không biết tương đương OS-X).

  • Lưu ý rằng khóa tập tin bắt buộc cũng có thể là một nguồn. Mặc dù điều này là bình thường trên Windows, nhưng nó thường không phải là trường hợp Unix bình thường và tôi chưa bao giờ nghe thấy nó cho các thư mục. Khóa tập tin bắt buộc được bảo vệ bởi POSIX, nhưng chúng là tùy chọn.

  • Rất thường xuyên trong các trường hợp như vậy, thư mục trong câu hỏi nằm trên một hệ thống tập tin khác với những gì bạn nghĩ. Bạn có thể tìm ra cái nào, với lệnh df directory(tôi nghĩ rằng điều này giống với OS-X).

  • Bạn có thể kiểm tra sâu hơn với các công cụ như stathoặc statfstrên thư mục. Tuy nhiên, đây là một mức độ thấp đối với người bình thường và khá thường xuyên các công cụ như vậy được ẩn giấu khỏi người dùng bình thường.

  • Thư mục có thể có các tập tin với tên vui nhộn. Giống như một tập tin mà ngay lập tức xóa đầu ra của thiết bị đầu cuối, vì vậy có vẻ như nó không ở đó. Hãy thử một cái gì đó như ls -al | lesshoặc sử dụng một cái gì đó như MidnightCommander mc.

Có rất nhiều tàu có khả năng khác, bao gồm bọ, haxor, người ngoài hành tinh, hoặc có lẽ những thứ kỳ lạ hơn như các nàng tiên. Nhưng thông thường, sẽ không khôn ngoan khi bắt đầu nhìn vào đó, thay vào đó trước tiên hãy cố gắng tìm ra lỗi ở bên bạn, bởi vì "errare humanum est".


1

Đây cũng có thể là một trường hợp tôi vừa giải quyết trong đó một liên kết tượng trưng bị hỏng ở phía máy chủ và không thể hiển thị cho máy khách qua CIFS. Symlink cư trú một thư mục không trống, nhưng máy khách không thể nhìn thấy hoặc đánh dấu liên kết tượng trưng cho mục đích xóa thư mục trước khi hủy liên kết thư mục. Vì nó là vô hình, nó đã tạo ra nghịch lý này, từ phía khách hàng, nó trống rỗng nhưng "không trống rỗng" khi thử thách bởi rm . Nếu bạn có quyền truy cập SSH vào máy chủ, hãy thử trình bao ở đầu đó và xem liệu thư mục có thực sự trống hoặc nếu nó có thể bị hỏng liên kết tượng trưng. Tôi đã có thể làm điều này trên một chiếc Dropbo5N và nó đã cứu được mông của tôi.


Điều này có thể hữu ích cho những người khác trong tình huống tương tự, nhưng chắc chắn không phải là trường hợp của tôi vì tôi không được kết nối với bất kỳ máy chủ nào vào thời điểm đó.
Ben Hocking

0

Hãy thử mở thư mục đó từ Windows, có thể có một cái gì đó không được hiển thị trong Mac OS. Tôi gặp vấn đề tương tự sau một số thao tác sao chép giữa Mac và Win PC: thư mục trống ngay cả trong thiết bị đầu cuối nhưng trên Windows tôi tìm thấy một tệp windows ẩn, vì vậy tôi đã xóa thành công thư mục từ đó.


0

Trong thiết bị đầu cuối:

  1. enter sudo su (Dấu nhắc dòng lệnh sẽ chuyển sang một cái gì đó như sh-3.2#.)
  2. điều hướng đến thư mục mẹ của thư mục bạn muốn xóa
  3. đi vào rm -rf TheDirectoryYouWantToDelete

0

Tôi gặp phải sự cố này trong khi cố gắng xóa thư mục mà Ứng dụng đang sử dụng. Khi tôi đóng Ứng dụng, tôi sẽ xóa thư mục mà không gặp phải lỗi này, vì vậy hãy thử thoát khỏi Ứng dụng có thể đang sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.