Làm thế nào để loại bỏ một cây thư mục định kỳ vô hạn?


9

Trên một trong các máy chủ tệp Windows 2003 của chúng tôi, bằng cách nào đó, ai đó hoặc thứ gì đó được quản lý để tạo các cây thư mục định kỳ vô hạn trong một số thư mục nhà của người dùng và chúng không thể bị xóa.

Bạn kết thúc với một cái gì đó như thế này:

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

Và nó tiếp tục vô tận theo như tôi đã có thể nói.

Cố gắng xóa cây thư mục khỏi hệ thống, nó nằm trong kết quả trong "Lỗi xóa tệp hoặc thư mục: Không thể xóa tệp:". Cố gắng xóa nó khỏi hệ thống Windows 7 được kết nối với mạng chia sẻ kết quả trong lỗi "thư mục đang sử dụng".

Nếu bạn điều hướng xuống cây thư mục khi bạn đi, cuối cùng bạn sẽ đến một thư mục không thể mở hoặc xóa (nếu nhấp chuột phải không có tùy chọn tiêu chuẩn nào xuất hiện), tuy nhiên nếu bạn cố mở cùng thư mục từ một chia sẻ trên hệ thống khác nó có thể được mở, tuy nhiên Windows Explorer trở nên cực kỳ chậm.

Tôi đã thử các đề xuất trong bài đăng này , cũng như khởi động máy chủ bằng đĩa Linux và cố gắng rm -rf thư mục, không hoạt động.

Nó là một bí ẩn.

Chỉnh sửa: Tôi cũng có thể thêm rằng có thể đổi tên các thư mục, chỉ cần không xóa chúng.


1
Một vấn đề tương tự đã được giải quyết trên Server Fault .
Lilienthal

Câu trả lời:


14

Tôi cũng có một thư mục đệ quy vô tận đã được tạo bởi java IDE và tôi không thể xóa nó trong Windows Explorer hoặc tại dấu nhắc cmd.

Tuy nhiên, khi tôi cài đặt git tôi cũng đã cài đặt git-bash. Trong git-bash, bạn có thể ra lệnh:

rm -rfd recursive_folder_name

và nó sẽ chăm sóc nó.


Lưu ý quan trọng: việc này có thể mất một lượng lớn thời gian ... Nghỉ ngơi, ăn gì đó, uống cà phê và để công cụ Unix thực hiện công việc của nó;) Đáng ngạc nhiên là nó hoạt động
Antwane

cũng hoạt động nếu sử dụng linux dựa trên vmware và gắn ổ đĩa (nếu nó ở bên ngoài ...)
Wolfgang Fahl

4

Có thể có Liên kết tượng trưng đến một thư mục ở đâu đó, rất có thể là liên kết thứ hai studenttrong đường dẫn của bạn.

Hãy thử thực hiện lệnh:

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

và xem liệu studentđược đánh dấu là TRỰC TIẾP hoặc SYMLINK / JUNCTION.

Ví dụ, đây là một đầu ra điển hình của dirlệnh:

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

Bạn thấy rằng hai mục đầu tiên được đánh dấu là DIR, trong khi mục thứ ba (liên kết tượng trưng đến thư mục khác) được đánh dấu là SYMLINKD. Trong trường hợp của bạn (Windows 2003) Tôi nghĩ có JUNCTIONs thay vì SYMLINKs.

Nếu studentthư mục là một liên kết tượng trưng hoặc đường giao nhau, hãy chạy các lệnh:

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

và do đó thoát khỏi đệ quy.


Không có thư mục nào là symlink, tôi đã kiểm tra cặp đầu tiên cộng với cái ở cuối "nơi" nó bị kẹt.
EnglishInfix

2

Có thể là bất cứ ai đang làm việc trong thư mục đó quản lý để tạo ra một điểm giao nhau rằng vòng sao lưu từ user.nameđể servername, do đó tạo ra một cây thư mục 'vòng lặp vô hạn'.

Các mối nối là một tính năng của hệ thống tệp NTFS cho phép bạn tạo một liên kết tượng trưng đến một thư mục hoạt động như một bí danh cho thư mục. http://en.wikipedia.org/wiki/NTFS_jeft_point

Bạn có thể thấy trong phần "Hiệu ứng quan sát" của trang wiki về vấn đề bạn mô tả.

Hãy thử chạy tiện ích này để liệt kê các mối nối dưới máy chủ đó:

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

Nó cũng sẽ cung cấp cho bạn khả năng xóa điểm giao nhau.


2

Tôi gặp vấn đề tương tự khi nhật thực tạo ra một cây thư mục sâu ồ ạt mà tôi không thể xóa. Tuy nhiên, vì có thể di chuyển và đổi tên các thư mục, tôi đã viết một tệp bó để làm việc theo cách xóa cây thư mục một lúc và điều này đã hoạt động! Đối với cây thư mục rõ ràng cực kỳ sâu của FOLDERNAME trong thư mục C, nghĩa là

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

Tập tin hàng loạt:

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

Điều này hoạt động vì TEMPFOLDERNAME hiện là một cây có độ dài hữu hạn (một thư mục duy nhất không có gì trong đó) và cây FOLDERNAME khổng lồ có một thư mục ít hơn mỗi khi vòng lặp được chạy, cuối cùng chạm tới đáy bằng cách xóa một thư mục ở trên cùng.


1

Tôi đã gặp vấn đề tương tự với một mớ hỗn độn thư mục sâu hơn 5000 mà một số ứng dụng Java đã làm và tôi đã viết điều này:

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

Nó đã loại bỏ toàn bộ sau một thời gian, nhưng nó đã xoay sở để thực hiện công việc, tôi hy vọng nó sẽ giúp những người (như tôi), gặp phải vấn đề bực bội tương tự


1

Đã giải quyết các thư mục lặp vô tận của tôi với Script này:

: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

Tôi đã từng gặp vấn đề tương tự. Thư mục tôi muốn xóa chứa một cây liên kết vô tận có cùng tên và mọi nỗ lực xóa nó đều khiến Windows đưa ra lỗi "Tệp quá lâu ...". Nó đã thất bại bất kể lệnh nào tôi đã thử bao gồm tất cả các phương thức trên vì vậy tôi đã thử lệnh "rm" của Cygwin trong cửa sổ cmd ngay phía trên thư mục được đề cập. Tôi đã nhập "rm -r -f [thư mục]" và thư mục đã bị xóa mà không có khiếu nại.

Bạn có thể tải xuống Cygwin miễn phí từ https://cygwin.com/install.html . Về cơ bản, nó là một vỏ UNIX cho Windows chứa tất cả các lệnh phổ biến (ví dụ: ls, rm, du và cat) nhưng cũng có rất nhiều gói mà nếu tất cả được tải xuống sẽ chiếm khoảng 1GB dung lượng. Tôi tin rằng gói tải xuống mặc định bao gồm các lệnh UNIX. Nếu không, chúng nằm trong gói "utils" nếu bộ nhớ phục vụ.

LƯU Ý: Bạn không cần chạy các lệnh Cygwin trong cửa sổ shell bash riêng của nó. Chúng có thể được chạy trong cửa sổ cmd bằng cách thêm đường dẫn đến thư mục "bin" của cygwin vào biến môi trường PATH hệ thống của bạn. Trong trường hợp của tôi, tôi đã thêm "C: \ cygwin64 \ bin".

Tôi hi vọng cái này giúp được.


0

Tôi có cùng một vấn đề ở đây.

Trong các bài viết khác đã được đề xuất để phản chiếu một thư mục trống để chia sẻ mạng máng thư mục đích với MS RoboCopy.

Tại thời điểm này, tôi đang chạy nó, với "> nul" để tăng tốc (thực sự là vậy):

"C: \ TEMP" là một thư mục trống và "W: \ TMP" là thư mục bị ảnh hưởng :

bản sao / mir c: \ temp \ 127.0.0.1 \ w $ \ tmp> nul


1
Chào mừng đến với Siêu người dùng. Nếu bạn đang trích dẫn một giải pháp từ nơi khác, vui lòng bao gồm ghi nhận và liên kết để đọc thêm. Câu trả lời được dự định là giải pháp dứt khoát. Nếu bạn vẫn đang trong quá trình thử, điều này có thể là sớm để đăng.
fixer1234

0

Tôi cũng đã có điều này, trên một hệ thống Windows 10 độc lập. C: \ Người dùng \ Tên \ Lặp lại \ Lặp lại \ Lặp lại \ Lặp lại \ Lặp lại \ Lặp lại \ Lặp lại dường như vô cùng.

Theo OP, tôi có thể điều hướng bằng Windows hoặc Command Prompt đến khoảng thứ 50 và không cần thêm nữa. Tôi không thể xóa nó, hoặc nhấp vào nó, vv chính xác như được mô tả.

C là ngôn ngữ của tôi nên cuối cùng tôi đã viết một chương trình với một vòng lặp các cuộc gọi hệ thống, lặp lại cho đến khi chúng thất bại. Theo mã DOS từ JohnO, tôi đã tạo một thư mục có tên là tmp và di chuyển Lặp lại \ Lặp lại vào đó, xóa thư mục Lặp lại trống rỗng và di chuyển tmp \ Lặp lại vào thư mục hiện tại. Lặp đi lặp lại!

 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 chỉ chạy một lệnh hệ thống () và kiểm tra giá trị trả về, dừng lại nếu thất bại.

Điều quan trọng, nó đã thất bại một số lần. Tôi nghĩ có lẽ chương trình của tôi không hoạt động, hoặc nó dài vô tận. Tuy nhiên, tôi đã có điều này trước đây với các cuộc gọi hệ thống, với những thứ không được đồng bộ hóa, vì vậy tôi chỉ chạy lại chương trình và nó tiếp tục từ nơi nó dừng lại, vì vậy đừng nghĩ rằng chương trình của bạn không hoạt động. Tổng cộng, sau khi chạy nó khoảng 20 lần, nó đã xóa tất cả. Tổng cộng, ban đầu nó có khoảng 1280 thư mục. Không biết điều gì gây ra nó. Khùng.


0

Với các thư mục lặp 3 cấp:

: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

Giải thích để đi cùng với mã? <:: ;; :: ;; :: ;; :: ;;: :( | XXXX |) o ~
Pimp Juice IT

0

Tôi đã sửa nó bằng cách Chạy chkdsk / f thông qua bảng điều khiển quản trị, khởi động lại và sau đó sử dụng xóa tệp thám hiểm. Mặc dù các cửa sổ phàn nàn về tập tin / thư mục dài một cái gì đó, nó đã thoát khỏi thư mục đệ quy có vấn đề khi tôi xác nhận xóa.

Không chắc chắn nếu có các sự cố khác mà tôi có thể đã tạo bằng tùy chọn chkdsk cũ trong hệ thống tệp Windows 7 Pro của mình ..


0

Đối với tôi, biến thể của phương pháp Windows RoboCopy này đã hoạt động:

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

Vâng, nó mất thời gian nhưng đã làm công việc.


-1

Đơn giản chỉ cần chạy MS ROBOCOPY như sau:

  1. Tạo một "thư mục trống" có cùng tên với thư mục chứa "cây thư mục định kỳ vô hạn".
  2. Chạy ROBOCOPY từ dòng lệnh với tùy chọn / MIR.
  3. Sau khi ROBOCOPY kết thúc (và có thể mất vài giây),
  4. Xóa thư mục với "cây thư mục định kỳ vô hạn" mà bây giờ là "thư mục trống".
  5. Đồng thời tiếp tục và xóa "thư mục trống" bạn đã tạo ở Bước 1.

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

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

Ở đâu:

C: \ anyplace \ BADFOLDER .. là "thư mục trống" bạn đã tạo và

C: \ where \ BADFOLDER .. là thư mục chứa "cây thư mục định kỳ vô hạn".

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

Sau khi ROBOCOPY chạy .. Bây giờ bạn có hai BADFOLDERS "trống".

Để dọn dẹp, xóa cả hai

C: \ anyplace \ BADFOLDER và C: \ where \ BADFOLDER

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.