Bagaimana cara menghapus pohon direktori berulang yang tak terhingga?

9

Pada salah satu server file Windows 2003 kami, entah bagaimana seseorang atau sesuatu berhasil membuat pohon direktori berulang yang tak terhingga dalam beberapa folder rumah pengguna, dan mereka tidak dapat dihapus.

Anda berakhir dengan sesuatu seperti ini:

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

Dan itu terus berlanjut sejauh yang saya bisa katakan.

Mencoba untuk menghapus pohon direktori dari sistem itu berada pada hasil dalam "Kesalahan menghapus file atau folder: Tidak dapat menghapus file:". Mencoba menghapusnya dari sistem Windows 7 yang terhubung ke jaringan berbagi menghasilkan kesalahan "folder yang digunakan".

Jika Anda menavigasi ke bawah pohon direktori sejauh Anda pergi Anda akhirnya mencapai direktori yang tidak dapat dibuka atau dihapus (jika diklik kanan tidak ada opsi standar muncul), namun jika Anda mencoba untuk membuka direktori yang sama dari share di sistem lain dapat dibuka, namun Windows Explorer menjadi sangat lambat.

Saya sudah mencoba saran dalam posting ini , serta mem-boot server dengan disk Linux dan mencoba rm -rf direktori, tidak ada yang berhasil.

Ini sebuah misteri.

Sunting: Saya mungkin juga menambahkan bahwa mungkin untuk mengganti nama direktori, hanya saja tidak menghapusnya.

Perbaikan Inggris
sumber
1
Masalah serupa diselesaikan pada Server Fault .
Lilienthal

Jawaban:

14

Saya juga memiliki folder rekursif tanpa henti yang telah dibuat oleh java java, dan saya tidak dapat menghapusnya di Windows Explorer atau di cmd prompt.

Namun, ketika saya menginstal git, saya juga menginstal git-bash. Di git-bash Anda dapat mengeluarkan perintah:

rm -rfd recursive_folder_name

dan itu akan membereskannya.

cdjohnk
sumber
Catatan penting: ini bisa memakan banyak waktu ... Istirahat, makan sesuatu, minum kopi, dan biarkan alat Unix melakukan tugasnya;) Anehnya itu bekerja
Antwane
juga berfungsi jika menggunakan linux berbasis vmware dan me-mount drive (jika eksternal ...)
Wolfgang Fahl
4

Mungkin saja ada Link Simbolik ke folder di suatu tempat, kemungkinan yang kedua studentdi jalur Anda.

Coba jalankan perintah:

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

dan lihat apakah studentditandai sebagai DIR atau SYMLINK / JUNCTION.

Sebagai contoh, ini adalah output khas dari dirperintah:

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

Anda melihat bahwa dua entri pertama ditandai sebagai DIR, sedangkan yang ketiga (tautan simbolik ke folder lain) ditandai sebagai SYMLINKD. Dalam kasus Anda (Windows 2003) saya pikir ada JUNCTIONs bukannya SYMLINKs.

Jika studentfolder itu adalah tautan simbolik atau persimpangan, jalankan perintah:

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

dan dengan demikian menyingkirkan rekursi.

Cristian Lupascu
sumber
Tidak ada direktori yang symlink, saya memeriksa pasangan pertama plus yang ada di "akhir" di mana macet.
EnglishInfix
2

Ada kemungkinan bahwa siapa bekerja di folder yang mengelola untuk membuat titik persimpangan yang loop cadangan dari user.nameke servername, sehingga menciptakan pohon 'loop tak terbatas' direktori.

Persimpangan adalah fitur dari sistem file NTFS yang memungkinkan Anda membuat tautan simbolis ke direktori yang beroperasi sebagai alias ke direktori. http://en.wikipedia.org/wiki/NTFS_junction_point

Anda dapat melihat di bagian "Efek yang Teramati" pada halaman wiki masalah yang Anda uraikan.

Coba jalankan utilitas ini untuk mendaftar persimpangan di bawah server itu:

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

Ini juga harus memberi Anda kemampuan untuk menghapus titik persimpangan.

Justin Pearce
sumber
2

Saya memiliki masalah yang sama ketika gerhana membuat pohon folder besar-besaran yang mendalam yang tidak bisa saya hapus. Namun karena itu mungkin untuk memindahkan dan mengganti nama folder saya menulis file batch untuk bekerja itu turun ke pohon menghapus folder satu per satu dan ini berhasil! Untuk pohon folder FOLDERNAME yang tampaknya sangat dalam di direktori C, yaitu

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

File kumpulan:

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

Ini berfungsi karena TEMPFOLDERNAME sekarang menjadi pohon dengan panjang yang terbatas (satu folder tanpa apa-apa di dalamnya) dan pohon FOLDERNAME yang masif memiliki satu folder lebih sedikit setiap kali loop dijalankan, akhirnya mencapai bagian bawah dengan menghapus folder di bagian atas.

JohnO
sumber
1

Saya mengalami masalah yang sama dengan kekacauan folder direktori sedalam 5000+ yang dilakukan oleh beberapa aplikasi Java dan saya menulis ini:

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

Ini menghapus semuanya setelah beberapa saat, tetapi berhasil melakukan pekerjaan, saya harap ini membantu orang yang (seperti saya), mengalami masalah yang sama membuat frustrasi

Imanol Barba Sabariego
sumber
1

Memecahkan direktori perulangan tanpa akhir dengan Script ini:

: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
Schollbert
sumber
0

Saya memiliki masalah yang sama. Folder yang ingin saya hapus berisi pohon tautan yang tak ada habisnya dengan nama yang sama dan setiap upaya untuk menghapusnya menyebabkan Windows melemparkan kesalahan "File terlalu panjang ...". Gagal terlepas dari perintah yang saya coba, termasuk semua metode di atas, jadi saya mencoba perintah "rm" Cygwin di jendela cmd tepat di atas folder yang dimaksud. Saya memasukkan "rm -r -f [folder]" dan folder itu dihapus tanpa keluhan.

Anda dapat mengunduh Cygwin secara gratis dari https://cygwin.com/install.html . Pada dasarnya shell UNIX untuk Windows yang berisi semua perintah umum (misalnya, ls, rm, du, dan cat) tetapi juga memiliki banyak paket yang jika semua diunduh akan memakan ruang sekitar 1GB. Saya percaya paket unduhan default termasuk perintah UNIX. Jika tidak, mereka ada dalam bundel "utils" jika memori berfungsi.

CATATAN: Anda tidak perlu menjalankan perintah Cygwin di jendela bash shell asalnya. Mereka dapat dijalankan di jendela cmd dengan menambahkan path ke direktori "bin" cygwin ke variabel lingkungan PATH sistem Anda. Dalam kasus saya, saya menambahkan "C: \ cygwin64 \ bin".

Saya harap ini membantu.

Cal
sumber
0

Saya memiliki masalah yang sama di sini.

Dalam posting lain disarankan untuk mirror folder kosong ke folder target melalui berbagi jaringan dengan MS RoboCopy.

Pada saat yang tepat ini saya sedang menjalankan ini, dengan "> nul" untuk mempercepat (itu benar-benar):

"C: \ TEMP" adalah folder kosong dan "W: \ TMP" adalah folder yang terpengaruh :

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

davidmarquesneves
sumber
1
Selamat datang di Pengguna Super. Jika Anda mengutip solusi dari tempat lain, harap sertakan atribusi dan tautan untuk bacaan lebih lanjut. Jawaban dimaksudkan sebagai solusi definitif. Jika Anda masih dalam proses mencoba ini, mungkin terlalu dini untuk memposting.
fixer1234
0

Saya juga punya ini, pada sistem Windows 10 mandiri. C: \ Pengguna \ Nama \ Ulangi \ Ulangi \ Ulangi \ Ulangi \ Ulangi \ Ulangi yang tampaknya tak terhingga.

Sesuai OP, saya bisa menavigasi menggunakan Windows atau Command Prompt ke sekitar 50 dan tidak lebih lanjut. Saya tidak bisa menghapusnya, atau mengkliknya, dll persis seperti yang dijelaskan.

C adalah bahasa saya jadi akhirnya saya menulis sebuah program dengan loop panggilan sistem, yang diulang sampai gagal. Sesuai kode DOS dari JohnO, saya membuat direktori bernama tmp dan memindahkan Repeat \ Repeat ke dalamnya, menghapus folder Repeat yang sekarang kosong, dan memindahkan tmp \ Repeat kembali ke folder saat ini. Lagi dan lagi!

 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 hanya menjalankan panggilan sistem () dan memeriksa nilai balik, berhenti jika gagal.

Yang penting, itu gagal beberapa kali. Saya pikir mungkin program saya tidak berfungsi, atau program itu lama sekali. Namun, saya pernah mengalami ini sebelumnya dengan pemanggilan sistem, dengan hal-hal yang tidak disinkronkan, jadi saya hanya menjalankan program lagi dan melanjutkan dari tempat sebelumnya, jadi jangan pikir program Anda tidak berfungsi. Secara total, setelah menjalankannya sekitar 20 kali, semuanya dibersihkan. Secara total, awalnya sekitar 1.280 folder. Tidak tahu apa yang menyebabkannya. Gila.

DenM
sumber
0

Dengan direktori perulangan 3-tingkat:

: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
JMi
sumber
Penjelasan untuk mengikuti kode? <:: ;; :: ;; :: ;; :: ;;: :( | XXXX |) o ~
Pimp Juice IT
0

Saya memperbaikinya dengan Menjalankan chkdsk / f melalui konsol admin, reboot dan kemudian menggunakan file explorer delete. Meskipun windows mengeluhkan tentang file / folder yang panjang, itu menghilangkan folder rekursif yang bermasalah begitu saya mengkonfirmasi untuk menghapus.

Tidak yakin apakah ada masalah lain yang mungkin saya buat menggunakan opsi chkdsk lama di sistem file Windows 7 Pro saya ..

Laks
sumber
0

Bagi saya variasi metode Windows RoboCopy ini berfungsi:

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

Ya, itu butuh waktu tetapi berhasil.

Dimitar II
sumber
-1

Cukup jalankan MS ROBOCOPY sebagai berikut:

  1. Buat "folder kosong" dengan nama yang sama dengan folder yang berisi "pohon direktori berulang tak terhingga".
  2. Jalankan ROBOCOPY dari baris perintah dengan opsi / MIR.
  3. Setelah ROBOCOPY berakhir (dan mungkin butuh beberapa detik),
  4. Hapus folder dengan "pohon direktori berulang tak terhingga" yang sekarang menjadi "folder kosong".
  5. Silakan juga menghapus "folder kosong" yang Anda buat pada Langkah 1.

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

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

Dimana:

C: \ anyplace \ BADFOLDER .. adalah "folder kosong" yang Anda buat, dan

C: \ dimanapun \ BADFOLDER .. adalah folder tempat "tree direktori berulang tak terhingga" adalah.

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

Setelah ROBOCOPY berjalan .. Anda sekarang memiliki dua BADFOLDER "kosong".

Untuk membersihkan, hapus keduanya

C: \ anyplace \ BADFOLDER dan C: \ dimanapun \ BADFOLDER

R. Serpkenci
sumber