วิธีการลบทรีไดเรกทอรีที่เกิดซ้ำไม่สิ้นสุดได้อย่างไร


9

ในหนึ่งในเซิร์ฟเวอร์ไฟล์ Windows 2003 ของเราบางคนหรือบางสิ่งบางอย่างได้รับการจัดการเพื่อสร้างโครงสร้างไดเรกทอรีที่เกิดขึ้นซ้ำ ๆ อย่างไม่สิ้นสุดภายในโฟลเดอร์โฮมของผู้ใช้บางส่วนและไม่สามารถลบได้

คุณปิดท้ายด้วยสิ่งนี้:

D:\Student\2012\user.name\servername\student\2012\user.name\servername\student\2012\...

และมันยังคงดำเนินต่อไปอย่างไม่มีสิ้นสุดเท่าที่ฉันสามารถบอกได้

กำลังพยายามลบแผนผังไดเรกทอรีจากระบบที่อยู่ในผลลัพธ์ใน "ข้อผิดพลาดในการลบไฟล์หรือโฟลเดอร์: ไม่สามารถลบไฟล์:" กำลังพยายามลบออกจากระบบ Windows 7 ที่เชื่อมต่อกับเครือข่ายใช้ร่วมกันส่งผลให้เกิดข้อผิดพลาด "โฟลเดอร์ที่ใช้งาน"

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

ฉันได้ลองคำแนะนำในโพสต์นี้แล้วรวมถึงการบูทเซิร์ฟเวอร์ด้วยดิสก์ Linux และพยายามที่จะทำตามคำสั่ง rm -rf ไม่ได้ทำงาน

มันเป็นเรื่องลึกลับ

แก้ไข: ฉันอาจเพิ่มว่าเป็นไปได้ที่จะเปลี่ยนชื่อไดเรกทอรีเพียงไม่ลบออก


1
ปัญหาที่คล้ายกันได้รับการแก้ไขในเซิร์ฟเวอร์ผิดพลาด
Lilienthal

คำตอบ:


14

ฉันยังมีโฟลเดอร์เวียนวนซ้ำที่สร้างขึ้นโดย java IDE และฉันไม่สามารถลบมันใน Windows Explorer หรือที่พรอมต์คำสั่ง

อย่างไรก็ตามเมื่อฉันติดตั้ง git ฉันก็ติดตั้ง git-bash ด้วย ใน git-bash คุณสามารถใช้คำสั่ง:

rm -rfd recursive_folder_name

และมันจะดูแลมัน


หมายเหตุสำคัญ: สิ่งนี้อาจใช้เวลานาน ... พักสมองกินอะไรดื่มกาแฟแล้วปล่อยให้ Unix Tool ทำงานได้;) น่าประหลาดใจที่มันทำงานได้
Antwane

ยังใช้งานได้หากใช้ vmware based linux และติดตั้งไดรฟ์ (ถ้าเป็นภายนอก ... )
Wolfgang Fahl

4

อาจเป็นไปได้ว่ามีลิงก์สัญลักษณ์ไปยังโฟลเดอร์แห่งหนึ่งซึ่งเป็นไปได้มากว่าอันดับที่สองstudentในเส้นทางของคุณ

ลองใช้คำสั่ง:

dir D:\Student\2012\user.name\servername

และดูว่าstudentมีการทำเครื่องหมายเป็น DIR หรือ SYMLINK / JUNCTION

ตัวอย่างเช่นนี่เป็นเอาต์พุตปกติของdirคำสั่ง:

04/24/2012  10:58 PM    <DIR>          .
04/24/2012  10:58 PM    <DIR>          ..
04/24/2012  10:58 PM    <SYMLINKD>     a [h:\a]

คุณจะเห็นว่าทั้งสองรายการแรกที่มีการทำเครื่องหมายเป็นDIRในขณะที่สาม (การเชื่อมโยงสัญลักษณ์ไปยังโฟลเดอร์อื่น) SYMLINKDถูกทำเครื่องหมายเป็น ในกรณีของคุณ (Windows 2003) ผมคิดว่ามีJUNCTIONs แทนSYMLINKs

หากstudentโฟลเดอร์เป็นลิงก์สัญลักษณ์หรือจุดเชื่อมต่อให้รันคำสั่ง:

cd /d D:\Student\2012\user.name\servername
rmdir student

และกำจัดการเรียกซ้ำ


ไม่มีไดเรกทอรีใดที่เป็น symlink ฉันตรวจสอบคู่แรกบวกหนึ่งที่ "จบ" ซึ่งติดอยู่
EnglishInfix

2

อาจเป็นไปได้ว่าใครก็ตามที่ทำงานในโฟลเดอร์นั้นจัดการเพื่อสร้างจุดเชื่อมต่อที่วนกลับจากuser.nameไปservernameเป็นดังนั้นการสร้างทรีไดเรกทอรี 'วนรอบไม่สิ้นสุด'

Junctions เป็นคุณสมบัติของระบบไฟล์ NTFS ที่ให้คุณสร้างลิงค์สัญลักษณ์ไปยังไดเรกทอรีที่ทำงานเป็นนามแฝงของไดเรกทอรี http://en.wikipedia.org/wiki/NTFS_junction_point

คุณสามารถดูได้ในส่วน "ผลการสังเกต" ของหน้าวิกิปัญหาที่คุณอธิบาย

ลองเรียกใช้ยูทิลิตี้นี้เพื่อแสดงจุดเชื่อมต่อใต้เซิร์ฟเวอร์นั้น:

http://technet.microsoft.com/en-us/sysinternals/bb896768

นอกจากนี้ยังควรให้ความสามารถในการลบจุดเชื่อมต่อ


2

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

C:/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/...

ไฟล์ชุด :

:LoopStart
REN "C:/*FOLDERNAME*" "*TEMPFOLDERNAME*"
MOVE "C:/*TEMPFOLDERNAME*/*FOLDERNAME*" "C:/"
RMDIR /S /Q "C:/*TEMPFOLDERNAME*"
GOTO LoopStart
:LoopEnd

ใช้งานได้เนื่องจาก TEMPFOLDERNAME เป็นต้นไม้ที่มีความยาว จำกัด (โฟลเดอร์เดียวที่ไม่มีสิ่งใดอยู่) และต้นไม้ FOLDERNAME ขนาดใหญ่มีโฟลเดอร์น้อยกว่าทุกครั้งที่มีการเรียกใช้วนซ้ำในที่สุด


1

ฉันพบปัญหาเดียวกันกับระเบียบโฟลเดอร์ที่มีความลึกมากกว่า 5,000 ไดเรกทอรีซึ่งมีบางแอปพลิเคชัน Java ทำและฉันเขียนสิ่งนี้:

https://gitlab.imanolbarba.net/imanol/DiREKT

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


1

แก้ไขไดเรกทอรีวนซ้ำไม่สิ้นสุดของฉันด้วยสคริปต์นี้:

:LoopStart
takeown /F "c:\temp\Application Data"
Attrib -S -H "c:\temp\Application Data"
REN "C:\temp\Application Data" "5"
takeown /F "c:\temp\5\Application Data"
Attrib -S -H "c:\temp\5\Application Data"
MOVE "c:\temp\5\Application Data" "C:\temp"
Del /F /S /Q c:\temp\5\*.*
RMDIR /S /Q "C:\temp\5"
GOTO LoopStart
:LoopEnd

0

ผมมีปัญหาเดียวกัน. โฟลเดอร์ที่ฉันต้องการลบมีต้นไม้ที่ไม่มีที่สิ้นสุดของลิงก์ไปยังชื่อเดียวกันและทุกครั้งที่พยายามลบมันทำให้ Windows ขว้างข้อผิดพลาด "File long ... ... " มันล้มเหลวโดยไม่คำนึงถึงคำสั่งที่ฉันลองรวมถึงวิธีการข้างต้นทั้งหมดดังนั้นฉันจึงลองใช้คำสั่ง "rm" ของ Cygwin ในหน้าต่าง cmd ที่อยู่เหนือโฟลเดอร์ที่เป็นปัญหา ฉันป้อน "rm -r -f [folder]" และโฟลเดอร์ถูกลบโดยไม่มีการร้องเรียน

คุณสามารถดาวน์โหลด Cygwin ฟรีจากhttps://cygwin.com/install.html โดยทั่วไปแล้วมันเป็นยูนิกซ์เชลล์สำหรับ Windows ที่มีคำสั่งทั่วไปทั้งหมด (เช่น ls, rm, du, และ cat) แต่ก็มีแพ็กเกจมากมายที่ถ้าดาวน์โหลดทั้งหมดจะใช้พื้นที่ประมาณ 1GB ฉันเชื่อว่าแพ็คเกจดาวน์โหลดเริ่มต้นมีคำสั่ง UNIX ถ้าไม่พวกเขากำลังอยู่ในชุด "utils" ถ้าหน่วยความจำทำหน้าที่

หมายเหตุ: คุณไม่จำเป็นต้องเรียกใช้คำสั่ง Cygwin ในหน้าต่าง bash shell แบบดั้งเดิม พวกเขาสามารถเรียกใช้ในหน้าต่าง cmd โดยการเพิ่มเส้นทางไปยังไดเรกทอรี "bin" ของ cygwin ไปยังตัวแปรสภาพแวดล้อม PATH ของระบบของคุณ ในกรณีของฉันฉันเพิ่ม "C: \ cygwin64 \ bin"

ฉันหวังว่านี่จะช่วยได้.


0

ฉันมีปัญหาเดียวกันที่นี่

ในการโพสต์อื่น ๆ ได้รับการแนะนำเพื่อสะท้อนโฟลเดอร์ว่างเปล่าไปยังโฟลเดอร์เป้าหมายเครือข่ายรางเครือข่ายร่วมกับ MS RoboCopy

ในขณะนี้ฉันกำลังใช้งานอยู่โดยใช้ "> nul" เพื่อเร่งความเร็ว (ทำได้จริง ๆ ):

"C: \ TEMP" เป็นโฟลเดอร์ว่างและ "W: \ TMP" เป็นโฟลเดอร์ที่ได้รับผลกระทบ :

robocopy / mir c: \ temp \ 127.0.0.1 \ w $ \ tmp> nul


1
ยินดีต้อนรับสู่ Super User หากคุณกำลังอ้างถึงวิธีแก้ปัญหาจากที่อื่นโปรดระบุที่มาและลิงก์สำหรับการอ่านเพิ่มเติม รู้รอบมีจุดมุ่งหมายเพื่อเป็นทางออกที่ชัดเจน หากคุณยังอยู่ในขั้นตอนการลองสิ่งนี้อาจเป็นการโพสต์ก่อนกำหนด
fixer1234

0

ฉันก็มีสิ่งนี้เช่นกันในระบบ Windows 10 แบบสแตนด์อโลน C: \ User \ ชื่อ \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat ดูเหมือนจะไม่มีที่สิ้นสุด

ตาม OP ฉันสามารถนำทางโดยใช้ Windows หรือ Command Prompt เพื่อประมาณ 50 และไม่เพิ่มเติม ฉันไม่สามารถลบมันหรือคลิกที่มัน ฯลฯ ตามที่อธิบายไว้

C คือภาษาของฉันดังนั้นในที่สุดฉันก็เขียนโปรแกรมที่มีการวนรอบการเรียกของระบบซึ่งทำซ้ำจนกว่าพวกเขาจะล้มเหลว ตามรหัส DOS จาก JohnO ฉันสร้างไดเรกทอรีชื่อ tmp และย้าย Repeat \ Repeat ไปที่นั้นลบโฟลเดอร์ Repeat ที่ว่างแล้วและย้าย tmp \ Repeat กลับไปที่โฟลเดอร์ปัจจุบัน ครั้งแล้วครั้งเล่า!

 while (times<2000)
 {
  ChkSystem("move Repeat\\Repeat tmp");
  ChkSystem("rd Repeat");
  ChkSystem("move tmp\\Repeat Repeat");
  ++times;
  printf("Removed %d nested so far.\n", times);
 }

ChkSystem เพียงแค่เรียกใช้การเรียกใช้ระบบ () และตรวจสอบค่าส่งคืนหยุดถ้ามันล้มเหลว

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


0

ด้วยไดเรกทอรีการวนลูป 3 ระดับ:

:LoopStart
takeown /F "D:\temp\MyApp"
Attrib -S -H "D:\temp\MyApp"
REN "D:\temp\MyApp" "5"
takeown /F "D:\temp\5\MqttObserver"
Attrib -S -H "D:\temp\5\MqttObserver"
REN "D:\temp\5\MqttObserver" "6"
takeown /F "D:\temp\5\6\PackageFiles"
Attrib -S -H "D:\temp\5\6\PackageFiles"
REN "D:\temp\5\6\PackageFiles" "7"
MOVE "c:\temp\5" "C:\temp"
Del /F /S /Q c:\temp\5\*.*
RMDIR /S /Q "C:\temp\5"
MOVE "c:\temp\6" "C:\temp"
Del /F /S /Q c:\temp\6\*.*
RMDIR /S /Q "C:\temp\6"
MOVE "c:\temp\7" "C:\temp"
Del /F /S /Q c:\temp\7\*.*
RMDIR /S /Q "C:\temp\7"
GOTO LoopStart
:LoopEnd

คำอธิบายจะไปพร้อมกับรหัสหรือไม่ <:: ;; :: ;; :: ;; :: ;;: :( | XXXX |) o ~
Pimp Juice IT

0

ฉันได้รับการแก้ไขโดยการเรียกใช้ chkdsk / f ผ่านคอนโซลผู้ดูแลระบบรีบูตแล้วใช้การลบไฟล์ explorer แม้ว่า windows จะบ่นเรื่องไฟล์ / โฟลเดอร์ที่มีความยาว แต่มันก็กำจัดโฟลเดอร์ที่เรียกซ้ำที่มีปัญหาเมื่อฉันยืนยันว่าจะลบ

ไม่แน่ใจว่ามีปัญหาอื่น ๆ ที่ฉันอาจสร้างโดยใช้ตัวเลือก chkdsk เก่าในระบบไฟล์ Windows 7 Pro ของฉัน ..


0

สำหรับฉันการเปลี่ยนแปลงของวิธี Windows RoboCopy นี้ใช้ได้:

mkdir c:\empty
robocopy c:\empty toolongdir /purge
rmdir c:\empty
rmdir toolongdir

ใช่มันต้องใช้เวลา แต่ก็ทำงานได้


-1

เพียงเรียกใช้ MS ROBOCOPY ดังนี้:

  1. สร้าง "โฟลเดอร์ว่าง" ที่มีชื่อเดียวกับโฟลเดอร์ที่มี "โครงสร้างไดเรกทอรีที่เกิดซ้ำไม่สิ้นสุด"
  2. รัน ROBOCOPY จากบรรทัดคำสั่งด้วยตัวเลือก / MIR
  3. หลังจาก ROBOCOPY สิ้นสุดลง (และอาจใช้เวลาสองสามวินาที)
  4. ลบโฟลเดอร์ด้วย "ทรีไดเรกทอรีที่เกิดซ้ำไม่สิ้นสุด" ซึ่งขณะนี้เป็น "โฟลเดอร์ว่าง"
  5. ไปข้างหน้าและลบ "โฟลเดอร์ว่าง" ที่คุณสร้างในขั้นตอนที่ 1

. . . . . . . . . . . . . . .

ROBOCOPY "C: \ anyplace \ BADFOLDER" "C: \ where \ BADFOLDER" / MIR

ที่ไหน:

C: \ anyplace \ BADFOLDER .. เป็น "โฟลเดอร์ว่าง" ที่คุณสร้างและ

C: \ where \ BADFOLDER .. เป็นโฟลเดอร์ที่มี "ทรีไดเรกทอรีที่เกิดซ้ำไม่สิ้นสุด" คือ

. . . . . . . . . . . . . . .

หลังจาก ROBOCOPY ทำงาน .. ตอนนี้คุณมี BADFOLDERS "ว่าง" สองอัน

ในการล้างข้อมูลให้ลบทั้งสองอย่าง

C: \ anyplace \ BADFOLDER และ C: \ ทุกที่ \ BADFOLDER

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