Jak usunąć nieskończenie powtarzające się drzewo katalogów?

9

Na jednym z naszych serwerów plików Windows 2003 jakoś komuś lub coś udało się stworzyć nieskończenie powtarzające się drzewa katalogów w niektórych folderach domowych użytkowników i nie można ich usunąć.

Skończysz z czymś takim:

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

I to trwa nieskończenie, o ile mogłem powiedzieć.

Próba usunięcia drzewa katalogów z systemu, w którym się znajduje, powoduje „Błąd usuwania pliku lub folderu: Nie można usunąć pliku:”. Próba usunięcia go z systemu Windows 7 podłączonego do udziału sieciowego powoduje błąd „folderu w użyciu”.

Jeśli poruszasz się po drzewie katalogów do samego końca, ostatecznie docierasz do katalogu, którego nie można otworzyć ani usunąć (po kliknięciu prawym przyciskiem myszy nie pojawiają się żadne standardowe opcje), jednak jeśli spróbujesz otworzyć ten sam katalog z udziału w innym systemie można go otworzyć, jednak Eksplorator Windows staje się bardzo wolny.

Wypróbowałem sugestie zawarte w tym poście, a także uruchomiłem serwer za pomocą dysku Linux i próbowałem wykonać komendę rm -rf katalogu, żadne z nich nie działało.

To jest tajemnica.

Edycja: Mogę również dodać, że można zmienić nazwy katalogów, ale po prostu ich nie usuwać.

EnglishInfix
źródło
1
Podobny problem został rozwiązany w przypadku awarii serwera .
Lilienthal,

Odpowiedzi:

14

Miałem też nieskończenie rekurencyjny folder, który został utworzony przez java IDE i nie mogłem go usunąć ani w Eksploratorze Windows, ani w wierszu polecenia cmd.

Jednak gdy zainstalowałem git, zainstalowałem także git-bash. W git-bash możesz wydać polecenie:

rm -rfd recursive_folder_name

i zajmie się tym.

cdjohnk
źródło
Ważna uwaga: może to zająć dużo czasu ... Zrób sobie przerwę, zjedz coś, wypij kawę i pozwól, aby narzędzie Unix
wykonało
działa również, jeśli używasz Linux-a opartego na oprogramowaniu vmware i montujesz napęd (jeśli jest zewnętrzny ...)
Wolfgang Fahl
4

Możliwe, że gdzieś jest symboliczny link do folderu, najprawdopodobniej drugi studentna twojej ścieżce.

Spróbuj wykonać polecenie:

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

i sprawdź, czy studentjest oznaczony jako DIR lub SYMLINK / JUNCTION.

Na przykład jest to typowy wynik dirpolecenia:

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

Widzisz, że pierwsze dwa wpisy są oznaczone jako DIR, a trzeci (symboliczny link do innego folderu) jako SYMLINKD. W twoim przypadku (Windows 2003) myślę, że są JUNCTIONs zamiast SYMLINKs.

Jeśli studentfolder jest dowiązaniem symbolicznym lub łączeniem, uruchom polecenia:

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

i w ten sposób pozbyć się rekurencji.

Cristian Lupascu
źródło
Żaden z katalogów nie jest dowiązaniami symbolicznymi, sprawdziłem pierwszą parę plus tę na „końcu”, gdzie się zacina.
EnglishInfix
2

Możliwe, że ktokolwiek pracował w tym folderze, zdołał utworzyć punkt połączenia, który zapętla się z powrotem user.namedo servername, tworząc w ten sposób drzewo katalogów „nieskończonej pętli”.

Połączenia są funkcją systemu plików NTFS, która umożliwia utworzenie dowiązania symbolicznego do katalogu, który działa jako alias do katalogu. http://en.wikipedia.org/wiki/NTFS_junction_point

W sekcji „Obserwowane efekty” na stronie wiki możesz zobaczyć opisany problem.

Spróbuj uruchomić to narzędzie, aby wyświetlić listę skrzyżowań na tym serwerze:

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

Powinno to również umożliwić usunięcie punktu połączenia.

Justin Pearce
źródło
2

Miałem podobny problem, gdy zaćmienie utworzyło bardzo głębokie drzewo folderów, którego nie mogłem usunąć. Ponieważ jednak można było przenosić foldery i zmieniać ich nazwy, napisałem plik wsadowy do pracy, więc w dół drzewa usuwa się foldery jeden po drugim i to działa! Dla pozornie nieskończenie głębokiego drzewa folderów FOLDERNAME w katalogu C, tj

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

Plik wsadowy:

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

Działa to, ponieważ TEMPFOLDERNAME jest teraz drzewem o skończonej długości (pojedynczy folder bez niczego), a ogromne drzewo FOLDERNAME ma o jeden folder mniej za każdym razem, gdy pętla jest uruchamiana, ostatecznie osiągając dół, usuwając folder u góry.

JohnO
źródło
1

Natknąłem się na ten sam problem z ponad 5000 bałaganami katalogów z głębokim katalogiem, co niektóre aplikacje Java, i napisałem to:

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

Po pewnym czasie to wszystko usunęło, ale udało się to zrobić, mam nadzieję, że pomoże ludziom, którzy (tak jak ja) napotykają ten sam frustrujący problem

Imanol Barba Sabariego
źródło
1

Rozwiązałem moje nieskończone zapętlanie katalogów za pomocą tego skryptu:

: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
źródło
0

Miałem ten sam problem. Folder, który chciałem usunąć, zawierał niekończące się drzewo linków do tej samej nazwy, a każda próba jego usunięcia powodowała, że ​​system Windows generował błąd „Plik był zbyt długi ...”. Nie powiodło się, niezależnie od polecenia, które wypróbowałem, uwzględniając wszystkie powyższe metody, więc wypróbowałem polecenie „rm” Cygwina w oknie cmd tuż nad danym folderem. Wpisałem „rm -r -f [folder]” i folder został usunięty bez reklamacji.

Możesz pobrać Cygwin za darmo ze strony https://cygwin.com/install.html . Zasadniczo jest to powłoka UNIX dla systemu Windows, która zawiera wszystkie typowe polecenia (np. Ls, rm, du i cat), ale także ma mnóstwo pakietów, które gdyby wszystkie zostały pobrane, zajęłyby około 1 GB miejsca. Wierzę, że domyślny pakiet pobierania zawiera polecenia UNIX. Jeśli nie, znajdują się w pakiecie „utils”, jeśli pamięć służy.

UWAGA: Nie musisz uruchamiać poleceń Cygwin w natywnym oknie powłoki bash. Można je uruchomić w oknie cmd, dodając ścieżkę do katalogu „bin” cygwina do systemowej zmiennej środowiskowej PATH. W moim przypadku dodałem „C: \ cygwin64 \ bin”.

Mam nadzieję, że to pomoże.

Cal
źródło
0

Mam tutaj ten sam problem.

W innych postach zasugerowano utworzenie kopii lustrzanej pustego folderu do folderu docelowego poprzez udział sieciowy za pomocą MS RoboCopy.

W tym momencie uruchamiam to, używając „> nul”, aby przyspieszyć (naprawdę działa):

„C: \ TEMP” to pusty folder, a „W: \ TMP” to folder, którego dotyczy problem :

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

davidmarquesneves
źródło
1
Witamy w Super User. Jeśli powołujesz się na rozwiązanie z innego miejsca, podaj informacje o autorze i link do dalszego czytania. Odpowiedzi mają być ostatecznymi rozwiązaniami. Jeśli nadal próbujesz tego, publikowanie postów może być przedwczesne.
fixer1234,
0

Ja też to miałem w samodzielnym systemie Windows 10. C: \ Użytkownik \ Nazwa \ Powtórz \ Powtórz \ Powtórz \ Powtórz \ Powtórz \ Powtórz \ Powtórz pozornie do nieskończoności.

Zgodnie z PO mogłem nawigować za pomocą Windowsa lub wiersza polecenia do około 50. i nie dalej. Nie mogłem go usunąć ani kliknąć na niego itp. Dokładnie tak, jak to opisano.

C jest moim językiem, więc w końcu napisałem program z pętlą wywołań systemowych, które powtarzają się aż do niepowodzenia. Zgodnie z kodem DOS z JohnO utworzyłem katalog o nazwie tmp i przeniosłem do niego Repeat \ Repeat, usunąłem pusty teraz folder Repeat i przeniosłem tmp \ Repeat z powrotem do bieżącego folderu. W kółko!

 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 po prostu uruchamia wywołanie system () i sprawdza wartość zwracaną, zatrzymując się, jeśli się nie powiedzie.

Co ważne, zawiodło wiele razy. Myślałem, że może mój program nie działa lub że mimo wszystko był nieskończenie długi. Jednak miałem to już wcześniej przy wywołaniach systemowych, przy czym rzeczy się nie synchronizowały, więc po prostu ponownie uruchomiłem program i kontynuowałem od momentu, w którym został przerwany, więc nie myśl, że twój program nie działa. W sumie, po uruchomieniu go około 20 razy, wyczyścił je wszystkie. W sumie pierwotnie miało około 1280 folderów. Nie mam pojęcia, co to spowodowało. Zwariowany.

DenM
źródło
0

Z 3-poziomowymi katalogami zapętlonymi:

: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
źródło
Wyjaśnienie związane z kodem? <:: ;; :: ;; :: ;; :: ;;: :( | XXXX |) o ~
Pimp Juice IT
0

Naprawiłem to, uruchamiając komendę chkdsk / f za pomocą konsoli administracyjnej, uruchomiłem ponownie, a następnie użyłem kasownika plików. Chociaż system Windows narzekał na coś długiego pliku / folderu, pozbył się problematycznego folderu rekurencyjnego, gdy potwierdziłem jego usunięcie.

Nie jestem pewien, czy istnieją inne problemy, które mogłem utworzyć za pomocą starej opcji chkdsk w moim systemie plików Windows 7 Pro.

Laks
źródło
0

Dla mnie ta odmiana metody Windows RoboCopy działała:

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

Tak, zajmuje to trochę czasu, ale wykonało swoją pracę.

Dimitar II
źródło
-1

Po prostu uruchom MS ROBOCOPY w następujący sposób:

  1. Utwórz „pusty folder” o tej samej nazwie co folder zawierający „nieskończenie powtarzające się drzewo katalogów”.
  2. Uruchom ROBOCOPY z wiersza poleceń z opcją / MIR.
  3. Po zakończeniu ROBOCOPY (i może to potrwać kilka sekund),
  4. Usuń folder z „nieskończenie powtarzającym się drzewem katalogów”, które jest teraz „pustym folderem”.
  5. Idź dalej i usuń „pusty folder” utworzony w kroku 1.

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

ROBOCOPY „C: \ anyplace \ BADFOLDER” „C: \ wherever \ BADFOLDER” / MIR

Gdzie:

C: \ anyplace \ BADFOLDER .. to „pusty folder”, który utworzyłeś, i

C: \ wherever \ BADFOLDER .. to folder, w którym znajduje się „nieskończenie powtarzające się drzewo katalogów”.

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

Po uruchomieniu ROBOCOPY .. Masz teraz dwa „puste” BADFOLDERY.

Aby wyczyścić, usuń oba

C: \ anyplace \ BADFOLDER i C: \ wherever \ BADFOLDER

R. Serpkenci
źródło