กำลังพยายามลบไดเรกทอรีด้วย“ rm -rf” แต่ได้รับข้อความว่าไม่ว่างเปล่า


36

ฉันพยายามลบไดเรกทอรีโดยใช้ "rm -rf" และฉันได้รับข้อความ "Directory not empty":

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 (ลากโฟลเดอร์ไปที่ถังขยะ) ฉันจะได้รับข้อความ

ไม่สามารถดำเนินการให้เสร็จสมบูรณ์ได้เนื่องจากมีการใช้รายการ“ empty_directory”

ฉันได้ลองทำxattr -d com.apple.quarantineโดยไม่เชื่อเรื่องไสยศาสตร์ แต่ก็ไม่ได้ผล

บริบทที่สำคัญอาจเป็นไดเรคทอรีนี้เริ่มแรกในไดเรกทอรีที่ควรถูกลบโดยคำสั่ง "make clean" ที่ฉันออกให้ก่อนที่ Terminal จะล็อคฉันหลังจากนั้นอีกครึ่งหนึ่งของโปรแกรมอื่น ๆ ที่ฉันมี การใช้งานยังล็อคไว้รวมถึง Skype และในที่สุดระบบปฏิบัติการของตัวเอง ฉันต้องรีบูทคอมพิวเตอร์โดยกดปุ่มเปิด / ปิดค้างไว้

แก้ไขเพื่อเพิ่ม: encfsอีกชิ้นสำคัญของข้อมูลที่ผมออกมาเป็นว่านี่คือสิ่งที่เกิดขึ้นในการเข้ารหัสโฟลเดอร์àลา ฉันสามารถติดตามโฟลเดอร์ที่เกี่ยวข้องในด้านการเข้ารหัสและลบออกได้ ฉันยังไม่รู้ว่าทำไมฉันไม่สามารถทำได้จากด้านถอดรหัสของสิ่งต่าง ๆ ที่ฉันทำตามปกติ ฉันจะทิ้งคำตอบนี้ไว้ในตอนนี้ในกรณีที่ทุกคนมีคำตอบที่ดี


2
คุณมีเชลล์ตัวอื่นที่เปิดอยู่ในไดเรกทอรีนี้หรือแอพที่ใช้งานอยู่หรือไม่ คำว่า "ใช้งานอยู่" อาจหมายถึงว่า (แม้ว่าฉันไม่เคยมีประสบการณ์ไม่สามารถทำได้rmdir- แต่บ่อยครั้งเป็นสาเหตุที่ทำให้ไม่สามารถยกเลิกการต่อเชื่อมวอลุ่ม)
อิซซี่

ไม่ใช่ในเวลาที่มีการใช้คำสั่งพิเศษเหล่านั้น ฉันได้ทำการรีบูทเสร็จสิ้นก่อนหน้านั้น
Ben Hocking

บางครั้งฉันก็มีปัญหาเดียวกันกับ EncFS และตอนนี้ฉันก็ไม่รู้ว่าจะแก้ปัญหานี้อย่างไร มีอะไรใหม่
Martin Preusse

@emempe: สิ่งที่ฉันทำในที่สุดก็คือการลบโฟลเดอร์ในพื้นที่เข้ารหัสโดยใช้การประทับเวลาที่แก้ไขล่าสุดเป็นตัวระบุของฉัน (ซึ่งอาจเป็นอันตรายได้) หากฉันคิดวิธีแก้ปัญหาที่ดีกว่าฉันจะแจ้งให้คุณทราบ
Ben Hocking

@ BenHocking: ฉันก็ทำเช่นกัน เกิดขึ้นไม่บ่อยนักสำหรับฉันดังนั้นฉันสบายดีกับสิ่งนี้ ถึงกระนั้นฉันไม่ชอบความรู้สึกที่ EncFS ของฉันได้รับความเสียหายอย่างใด ... ;) EncFS ของฉันอยู่ใน Dropbox อาจจะมีการเชื่อมต่อบางส่วน?
Martin Preusse

คำตอบ:


12

รีบูตเครื่องคอมพิวเตอร์ของคุณและเรียกใช้rmdir(1)อีกครั้ง

$ rmdir -r empty_directory/

หากไม่ได้ผลให้ลอง:

$ rm -rf empty_directory/

หากยังใช้งานไม่ได้สมมติว่า OS X lsof(8)ติดตั้งไว้ล่วงหน้าแล้วให้ป้อน:

$ lsof +D empty_directory/

สิ่งนี้ควรบอกว่าไฟล์ใด ๆ ในไดเรกทอรีนี้กำลังถูกใช้งานโดยโปรแกรมใด ๆ ฉันคิดว่าระบบไฟล์ HFS + ไม่อนุญาตให้ลบไฟล์ที่ใช้งาน อย่างไรก็ตามkillall(1)ไฟล์ปฏิบัติการใด ๆ ที่อาจใช้ไดเรกทอรีนี้หรือไฟล์ที่ซ่อนอยู่ภายใน เป็นไปได้ว่า Finder กำลังใช้ไฟล์ที่ซ่อนอยู่ในempty_directoryไดเรกทอรีเพื่อจัดเก็บการตั้งค่ามุมมองโฟลเดอร์ หวังว่านี่จะช่วยได้

PS: หากต้องการตรวจสอบว่าlsof(8)มีการติดตั้งหรือไม่ให้ป้อน:

$ lsof

หากเอาต์พุตมีลักษณะเช่นนี้แสดงว่าlsof(8)มีการติดตั้งในระบบของคุณ

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

ตรวจสอบไฟล์ที่ซ่อนและเข้ารหัสหรือไฟล์คีย์การเข้ารหัสในไดเรกทอรีนั้น สิ่งเหล่านี้อาจเป็นตัวการ


4

การซ่อมแซมดิสก์โดยใช้ Disk Utility แก้ไขปัญหานี้ให้ฉันได้


สิ่งนี้จะใช้ได้กับสถานการณ์ส่วนใหญ่ที่ฉันเชื่อ ทำงานให้ฉันโดยสิ้นเชิง Thanx
GeekRide

คำสั่งเฉพาะคือ "เรียกใช้การปฐมพยาบาล ... " ภายใต้เมนูไฟล์ ฉันใช้เวลาค้นหานานเกินไปในเมนูเพื่อหาคำว่า "ซ่อมแซม" ก่อนที่ฉันจะรู้ตัว!
RoG

3

หากสิ่งนี้เกิดขึ้นและคุณแน่ใจว่าต้องการลบทุกสิ่งคุณควรลองใช้ sudo rm -rf directory/


1
วิธีนี้ใช้ไม่ได้กับ ~ / .Trash ด้วยเหตุผลบางประการ
MarcusJ

2
สิ่งนี้ไม่สามารถใช้งานได้จริงยกเว้นว่าปัญหาคือสิทธิ์ซึ่งจะเป็นข้อความแสดงข้อผิดพลาดที่แตกต่างกันไปยังคอนโซล
tresf

2

ฉันพบข้อผิดพลาดนี้ในขณะที่พยายามลบไดเรกทอรี (rm -r dirname) ฉันลองคำแนะนำทั้งหมดที่ฉันได้อ่านที่นี่ก่อนที่ฉันจะค้นหาและพบกระทู้นี้ ฉันไม่ทราบว่าอาจมีจุดเพิ่มเติมใด ๆ โดยไม่ได้ตั้งใจจากคำถามเดิมหรือไม่ แต่ในกรณีของฉันรากของปัญหาและวิธีแก้ไขคือ:

  • ไดเรกทอรีที่สงสัยนั้นอยู่บนดิสก์ที่ติดตั้งผ่านเครือข่าย

  • ความlsพยายามจาก Finder หรือบรรทัดคำสั่งไม่แสดงอะไรนอกจาก.และ..

  • ฉันเข้าสู่เซิร์ฟเวอร์ดิสก์เครือข่ายผ่านsshคำสั่งและตรวจสอบที่ls -alนั่น ผลลัพธ์แสดงให้เห็นว่านอกเหนือจาก.และ..มีหลาย.__filenameรายการที่มีข้อมูลความปลอดภัยเพิ่มเติม (เช่น+ผนวกเข้ากับโหมด)

ผมเชื่อว่าสิ่งเหล่านี้เป็นหรือมีความคล้ายคลึงกับไฟล์ซึ่งครั้งแรกที่ผมตั้งข้อสังเกต Mac OSX สร้างปีที่ผ่านมาเมื่อมีการใช้cp -R, tarหรือcpioจะเก็บหรือย้ายกลุ่มของไฟล์ ฉันได้อนุมานในเวลาที่พวกเขาถูกใช้เพื่อตั้งค่าคุณสมบัติของไฟล์บางอย่างหลังจากย้าย - อาจ uid / gid, โหมด, acls, mtime / utime / ctime ฯลฯ ; ฉันไม่แน่ใจว่าจริงๆ - คุณสมบัติซึ่งไม่ได้รับการตั้งค่าอย่างถูกต้องโดยคำสั่งดังกล่าวก่อนที่จะถึงเวลานั้น (ผมจำได้ว่า OSX ใช้ในการรวมmvmacและcpmacคำสั่งในการทำงานแก้ไขปัญหาก่อนที่เหล่านี้.__filenameประเภทของไฟล์ที่เริ่มปรากฏเมื่อมีการใช้รูปแบบปกติของcp, tarฯลฯ )

ฉันไม่เคยพบปัญหาในการลบไฟล์เหล่านี้เมื่อถูกเขียนลงในไดรฟ์ภายใน USB หรือ Firewire; นี่เป็นครั้งแรกที่ฉันพบพวกเขาในดิสก์เครือข่าย ตรวจไม่พบอย่างสมบูรณ์จากฝั่งไคลเอ็นต์ของการเมานต์ แต่ปกติในทุก ๆ ด้านเมื่อดูจากฝั่งเซิร์ฟเวอร์

rm -rf dirname จากการเข้าสู่ระบบบนเซิร์ฟเวอร์ดิสก์เครือข่ายลบไดเรกทอรีพร้อมกับเนื้อหาของมัน

ดังนั้นจึงมีคำตอบสำหรับสิ่งที่คุ้มค่าอีก; อีกวิธีที่เป็นไปได้สำหรับการแก้ไขปัญหานี้หากควรปรากฏขึ้นให้กับทุกคนที่เชื่อมต่อกับดิสก์เครือข่าย


2

ลองคำตอบทั้งหมดที่นี่โดยไม่มีผลลัพธ์ อย่างไรก็ตามฉันสามารถย้ายไดเรคทอรี่ไปได้โดยใช้คำสั่งmvซึ่งอนุญาตให้ฉันดำเนินการต่อ


2

ทางออกเดียวที่ทำงานได้สำหรับฉันมาจาก/unix/234876/unable-to-delete-a-file-whething-i-do :

ย้ายไปยัง / tmp และรีสตาร์ท

ตัวเลือกอื่น ๆ ที่ฉันลองคือ:

  • Disk Utility - การปฐมพยาบาล
  • lsof +D bad_file ไม่พบผลลัพธ์
  • sudo rm -rf
  • rm -rfบูตเข้ากับขั้วเดียวที่ผู้ใช้และ

1
Fsck จากเทอร์มินัลผู้ใช้คนเดียวไม่ได้ช่วยหรือrm -rfไม่lsof +Dแสดงอะไรเลย ผิดปกติฉันสามารถย้าย dirs ที่ละเมิดไป/tmpแม้ว่ามันจะไม่ถูกลบออกหลังจากรีสตาร์ท ปัญหาเดิมยังคงอยู่ แต่อย่างน้อยมันก็ค่อนข้างจะผิดไป
anapsix

1

เพื่อประโยชน์ของผู้อ่าน:

ระวังrm -rfในกรณีเช่นนี้! มันสามารถสร้างปัญหาที่อื่นในกรณีที่มันเกิดขึ้นเป็นเครือข่ายแชร์! คุณได้รับการเตือน!

ในเกือบทุกกรณีถ้ามีdirectoryน่าจะเป็นที่ว่างเปล่าใช้หรือบางทีอาจจะrmdir directory sudo rmdir directoryห้ามใช้rm(หรือdelภายใต้ Windows) rmdirหากยังไม่สามารถทำงานคุณต้องไปหาสิ่งที่บล็อกคำขอนี้แก้ไขนั้นแล้วลองใหม่

โปรดทราบว่าฉันไม่รู้จัก OS-X แต่ฉันคิดว่าสิ่งต่าง ๆ คล้ายกับพฤติกรรม Unix / BSD

เป็นไปได้มากว่าไดเรกทอรีที่เป็นปัญหานั้นเป็นเพียงจุดเชื่อมต่อ (จากตัวเข้ารหัส) หรืออยู่ในจุดเชื่อมต่อซึ่งกลายเป็นแบบอ่านอย่างเดียวหรือติดอยู่ในสถานะที่ไม่เหมาะสมบางอย่าง (ซึ่งป้องกันไม่ให้ไดเรกทอรีถูกลบ) หากคุณบังคับให้ลบไดเรกทอรีสิ่งเลวร้ายอาจเกิดขึ้นได้

ในกรณีที่ดีไดเรกทอรีว่างเปล่าจริง ๆ ดังนั้นการลบออก (ทำลายภูเขา ฯลฯ ) ไม่ได้เป็นอันตรายต่อไป ในกรณีที่เลวร้ายมันไม่ได้ว่างเปล่าดูเหมือนว่าจะหมายความว่าคุณทิ้งสิ่งที่คุณไม่ต้องการฆ่า ทั้งหมดนี้ขึ้นอยู่กับประเภทของเมานต์ซึ่งมีไดรเวอร์ที่ใช้งานอยู่ ฯลฯ pp

หากสิ่งต่าง ๆ ถูกนำไปใช้อย่างสมเหตุสมผล อย่างไรก็ตามนี่ไม่ใช่กรณีปกติ สิ่งต่าง ๆ อยู่ในสถานะแปลก ๆ แล้วซึ่งหมายความว่า: มีบางอย่างผิดปกติดังนั้นอย่าพยายามผสมให้เข้ากันให้ดียิ่งขึ้น! หากมีสิ่งแตกหักสัมผัสผิด ๆ อาจทำให้แตก

ตัวอย่างเช่นหากคุณเข้าสู่สภาวะการแย่งชิงบนเครือข่ายที่ใช้ร่วมกันอาจเป็นไปได้ว่าข้อมูลของคุณrm -rfจะถูกคัดลอกไปยังบุคคลอื่น

อย่างไรก็ตามrmdirรับประกันว่าจะไม่ทำอันตรายนอกจากลบไดเรกทอรีที่ว่างเปล่าจริงๆ แม้นี้เป็นความจริงบน NFS เพราะ NFS เท่านั้นรับประกันพฤติกรรมอะตอมอย่างแท้จริงในmkdirและrmdirแต่ไม่มีที่อื่น

FYI:

mountpoint directoryคุณสามารถตรวจสอบจุดเมานท์โดยใช้เครื่องมือ หรือดูที่เอาต์พุตของmountและลองหาจุดยึดของคุณที่นั่น แต่ระวังอย่างน้อยที่สุดก็อาจจะอยู่ภายใต้ Linux การใช้mountpointยูทิลิตี้น่าเชื่อถือมากขึ้น แต่สะดวกน้อยลง

ในกรณีที่คุณพบจุดเมานท์คุณสามารถถอนติดตั้งแล้วลบไดเรกทอรีนี่คือลำดับต่อไปนี้:

umount directory rmdir directory

หากจำเป็นต้องใช้sudoตามปกติ

หมายเหตุ:

  • เครือข่ายที่ใช้ร่วมกันอาจปฏิเสธrmdir(และสิ่งอื่นใด) เนื่องจากสิทธิ์การเข้าถึง

  • ระบบไฟล์ที่มีข้อบกพร่องอาจปฏิเสธrmdirขึ้นอยู่กับกลยุทธ์ล้มเหลว บางทีคุณอาจเห็นข้อความที่สมเหตุสมผลในกรณีนั้นอาจจะไม่ใช่

  • ภายใต้ Linux (และอาจเป็นระบบปฏิบัติการที่ทันสมัย) คุณสามารถ จำกัด การเข้าถึงโดยใช้วิธีการที่แตกต่างกัน (เช่นการติดตั้งสิ่งที่อ่านได้อย่างเดียวความสามารถเช่นใน SeLinux เป็นต้น) นี่หมายความว่าคุณไม่เห็นว่ามันเป็นจุดเมานท์และคุณไม่เห็นอะไรผิดปกติ แต่มันก็ไม่ทำงาน ในกรณีนี้คุณต้องมองหาเหตุผลอื่นและสามารถฝังลึกลงไปในระบบปฏิบัติการ ขึ้นอยู่กับเครื่องมือหากคุณเห็นข้อความแสดงข้อผิดพลาดที่สมเหตุสมผล อาจมีลักษณะเป็น syslog / kernel-log เช่นdmesgใต้ Linux (ขออภัยฉันไม่ทราบว่าเทียบเท่า OS-X)

  • โปรดทราบว่าการล็อกไฟล์บังคับอาจเป็นแหล่งได้เช่นกัน แม้ว่านี่จะเป็นเรื่องปกติใน Windows แต่โดยทั่วไปมันไม่ใช่ Unix ในกรณีปกติและฉันไม่เคยได้ยินชื่อไดเรกทอรีมาก่อน การล็อกไฟล์บังคับจะมีการครอบคลุมโดย POSIX แต่เป็นทางเลือก

  • บ่อยครั้งในกรณีเช่นนี้ไดเรกทอรีที่เป็นปัญหาจะอยู่ในระบบไฟล์ที่แตกต่างจากที่คุณคิด คุณสามารถค้นหาคำสั่งใดได้บ้างdf directory(ฉันคิดว่านี่เป็นสิ่งเดียวกันภายใต้ OS-X)

  • คุณสามารถตรวจสอบเชิงลึกด้วยเครื่องมือเช่นstatหรือstatfsในไดเรกทอรี อย่างไรก็ตามสิ่งเหล่านี้อยู่ในระดับต่ำเล็กน้อยสำหรับคนปกติและเครื่องมือเหล่านี้มักถูกซ่อนไว้จากผู้ใช้ปกติ

  • ไดเรกทอรีสามารถมีไฟล์ที่มีชื่อตลก ๆ เช่นเดียวกับไฟล์ที่ลบเทอร์มินัลเอาท์พุททันทีดังนั้นจึงดูเหมือนไม่มีอยู่ในนั้น ลองสิ่งที่ต้องการls -al | lessหรือใช้สิ่งที่ต้องการ mcMidnightCommander

มีสิ่งของอื่น ๆ ที่น่าขนลุกรวมทั้งแมลงบักซ์เตอร์เอเลี่ยนหรือสิ่งแปลก ๆ เช่นนางฟ้า แต่โดยปกติแล้วคุณไม่ควรเริ่มมองหาที่นั่นแทนก่อนอื่นลองค้นหาข้อผิดพลาดที่ด้านข้างของคุณเพราะ "errare humanum est"


1

นี่อาจเป็นกรณีที่ฉันเพิ่งแก้ไขซึ่ง symlink ที่ใช้งานไม่ได้อยู่บนฝั่งเซิร์ฟเวอร์และไคลเอ็นต์ไม่สามารถมองเห็นผ่าน CIFS symlink มีไดเร็กทอรีที่ไม่ว่าง แต่ไคลเอ็นต์ไม่สามารถมองเห็นหรือ stat symlink สำหรับวัตถุประสงค์ในการเคลียร์ไดเร็กทอรีก่อนที่จะยกเลิกการลิงก์ไดเร็กทอรี เพราะมันเป็นที่มองไม่เห็นมันสร้างความขัดแย้งนี้มาจากไหนฝั่งไคลเอ็นต์มันเป็นที่ว่างเปล่า แต่ "ไม่ว่าง" เมื่อความท้าทายโดยRM หากคุณมีการเข้าถึง SSH ไปยังเซิร์ฟเวอร์ให้ลองเชลล์ที่ส่วนท้ายนั้นและดูว่าไดเรกทอรีว่างเปล่าจริง ๆ หรืออาจมี symlink ที่ใช้งานไม่ได้หรือไม่ ฉันสามารถทำสิ่งนี้กับ Drobo5N และช่วยชีวิตฉันได้


นี่อาจเป็นประโยชน์สำหรับผู้อื่นในสถานการณ์ที่คล้ายกัน แต่ก็ไม่ใช่กรณีสำหรับฉันเพราะฉันไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์ใด ๆ ในเวลา
Ben Hocking

0

ลองเปิดไดเรกทอรีนั้นจาก Windows อาจมีบางอย่างที่ไม่ปรากฏใน Mac OS ฉันมีปัญหาที่คล้ายกันหลังจากการคัดลอกจำนวนมากระหว่าง Mac และ Win PC: ไดเรกทอรีว่างแม้ใน terminal แต่บน Windows ฉันพบไฟล์ windows ที่ซ่อนอยู่ดังนั้นฉันจึงลบไดเรกทอรีออกจากที่นั่นได้สำเร็จ


0

ในอาคารผู้โดยสาร:

  1. ป้อนsudo su (พรอมต์บรรทัดคำสั่งควรเปลี่ยนไปใช้สิ่งที่ต้องการsh-3.2#)
  2. นำทางไปยังโฟลเดอร์พาเรนต์ของโฟลเดอร์ที่คุณต้องการลบ
  3. เข้าสู่ rm -rf TheDirectoryYouWantToDelete

0

ฉันพบปัญหานี้ในขณะที่พยายามลบโฟลเดอร์ที่แอปพลิเคชันใช้อยู่ เมื่อฉันปิดแอปพลิเคชันฉันจะลบโฟลเดอร์โดยไม่ทิ้งข้อผิดพลาดนี้ดังนั้นให้ลองออกจากแอปพลิเคชันที่อาจใช้งานอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.