無限に繰り返されるディレクトリツリーを削除する方法


9

Windows 2003ファイルサーバーの1つで、なんらかの理由でユーザーのホームフォルダー内に無限に繰り返されるディレクトリツリーが作成されたため、削除できません。

あなたはこのようなもので終わります:

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

そして、私が知る限り、それは無限に続きます。

存在するシステムからディレクトリツリーを削除しようとすると、「ファイルまたはフォルダの削除エラー:ファイルを削除できません:」という結果になります。ネットワーク共有に接続されているWindows 7システムから削除しようとすると、「使用中のフォルダー」エラーが発生します。

ディレクトリツリーの下まで移動すると、最終的には開くことも削除することもできないディレクトリに到達します(右クリックした場合、標準オプションは表示されません)。ただし、別のシステムの共有から同じディレクトリを開こうとした場合開くことはできますが、エクスプローラは非常に遅くなります。

私はこの投稿の提案を試し、Linuxディスクでサーバーを起動して、ディレクトリをrm -rfしようとしましたが、どちらも機能しませんでした。

それは謎です。

編集:ディレクトリを削除するのではなく、ディレクトリの名前を変更することも可能であることも付け加えておきます。


1
同様の問題がServer Faultで解決されました。
Lilienthal 2015

回答:


14

また、Java IDEによって作成された無限に再帰的なフォルダーもあり、Windowsエクスプローラーでもcmdプロンプトでも削除できませんでした。

ただし、gitをインストールすると、git-bashもインストールされました。git-bashでは、次のコマンドを発行できます。

rm -rfd recursive_folder_name

そして、それはそれを世話します。


重要な注意:これには非常に時間がかかる場合があります...休憩して、何かを食べ、コーヒーを飲み、Unixツールにその仕事を任せてください;)驚くべきことに、それは機能します
Antwane

VMwareベースのLinuxを使用してドライブをマウントする場合も機能します(外付けの場合...)
Wolfgang Fahl

4

フォルダーへのシンボリックリンクがどこかにある可能性がありstudentます。おそらくパスの2番目です。

次のコマンドを実行してみてください:

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

studentDIRまたは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]

最初の2つのエントリはとマークされDIR、3番目のエントリ(別のフォルダへのシンボリックリンク)はとマークされていSYMLINKDます。あなたの場合(Windows 2003)JUNCTIONの代わりにSYMLINKs があると思います。

場合はstudent、フォルダがシンボリックリンクやジャンクションで、コマンドを実行します。

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

したがって、再帰を取り除きます。


どのディレクトリもシンボリックリンクではありません。最初のカップルと、スタックする「終わり」のカップルを確認しました。
EnglishInfix 2012

2

そのフォルダで作業していた人が、からuser.nameにループバックするジャンクションポイントservernameを作成して、「無限ループ」ディレクトリツリーを作成することができます。

ジャンクションは、ディレクトリへのエイリアスとして機能するディレクトリへのシンボリックリンクを作成できるNTFSファイルシステムの機能です。 http://en.wikipedia.org/wiki/NTFS_junction_point

Wikiページの「観察された影響」セクションで、説明した問題を確認できます。

このユーティリティを実行して、そのサーバーのジャンクションをリストしてみてください。

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

また、ジャンクションポイントを削除する機能も提供されます。


2

Eclipseが非常に深いフォルダーツリーを作成したときにも同様の問題があり、削除できませんでした。しかし、フォルダーを移動して名前を変更することが可能だったので、作業用にバッチファイルを作成しました。これは、フォルダーを一度に1つずつ削除するツリーのずっと下にあり、これでうまくいきました。CディレクトリにあるFOLDERNAMEの明らかに無限に深いフォルダツリー、すなわち

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つ少なくなるためです。


1

いくつかのJavaアプリケーションと同じ5000以上のディレクトリの深いフォルダーの混乱で同じ問題が発生しました。これを書きました。

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で「ファイルが長すぎます...」エラーが発生しました。上記のすべての方法を含めて試したコマンドに関係なく失敗したため、問題のフォルダーのすぐ上のcmdウィンドウでCygwinの「rm」コマンドを試してみました。「rm -r -f [フォルダ]」と入力すると、フォルダは問題なく削除されました。

Cygwinは、https: //cygwin.com/install.htmlから無料でダウンロードできます。基本的に、すべての一般的なコマンド(ls、rm、du、catなど)を含むWindows用のUNIXシェルですが、すべてダウンロードすると約1GBのスペースを占める大量のパッケージも含まれています。デフォルトのダウンロードパッケージにはUNIXコマンドが含まれていると思います。そうでない場合、メモリが機能する場合、それらは「utils」バンドルに含まれます。

注:ネイティブのbashシェルウィンドウでCygwinコマンドを実行する必要はありません。システムのPATH環境変数にcygwinの「bin」ディレクトリへのパスを追加することで、コマンドウィンドウで実行できます。私の場合、「C:\ cygwin64 \ bin」を追加しました。

これがお役に立てば幸いです。


0

ここでも同じ問題があります。

他の投稿では、MS RoboCopyを使用して、ネットワーク共有を介して空のフォルダーをターゲットフォルダーにミラーリングすることが提案されました。

この正しい瞬間に私はこれを実行していますが、> nul "でスピードアップします(実際に実行します)。

「C:\ TEMP」は空のフォルダーで、「W:\ TMP」は影響を受けるフォルダーです。

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


1
スーパーユーザーへようこそ。他の場所からのソリューションを引用する場合は、帰属と詳細情報へのリンクを含めてください。回答は、決定的なソリューションとなることを目的としています。まだこれを試している場合、投稿するのは時期尚早かもしれません。
fixer1234

0

私も、スタンドアロンのWindows 10システムでこれを行いました。C:\ User \ Name \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat \ Repeatは無限に見える。

OPに従って、私はWindowsまたはコマンドプロンプトを使用して約50番目までナビゲートでき、それ以上はナビゲートできませんでした。説明どおりに削除したり、クリックしたりできませんでした。

Cが私の言語なので、最終的には、システムコールのループを含むプログラムを作成しました。ループは失敗するまで繰り返されます。JohnOからのDOSコードに従って、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はsystem()呼び出しを実行して戻り値をチェックし、失敗した場合は停止します。

重要なのは、何度も失敗したことです。プログラムが機能していない、または結局非常に長いと思いました。しかし、以前はシステムコールでこれが発生し、同期が取れていなかったため、プログラムを再度実行したところ、中断したところから実行されたままなので、プログラムが機能していないとは思わないでください。合計で約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)
ポンジュースIT

0

管理コンソールからchkdsk / fを実行して修正し、再起動してからファイルエクスプローラーの削除を使用しました。Windowsは長いファイル/フォルダーについて不平を言っていましたが、削除することを確認すると、問題のある再帰フォルダーを取り除きました。

Windows 7 Proファイルシステムで古いchkdskオプションを使用して作成した可能性のある他の問題があるかどうかはわかりません。


0

私にとって、Windows RoboCopyメソッドのこのバリエーションは機能しました:

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

はい、時間がかかりますが、仕事はしました。


-1

MS ROBOCOPYを次のように実行するだけです。

  1. 「無限に繰り返されるディレクトリツリー」を含むフォルダと同じ名前の「空のフォルダ」を作成します。
  2. / MIRオプションを指定して、コマンドラインからROBOCOPYを実行します。
  3. ROBOCOPYが終了した後(数秒かかる場合があります)、
  4. 「空のフォルダ」となった「無限に繰り返されるディレクトリツリー」を持つフォルダを削除します。
  5. また、ステップ1で作成した「空のフォルダー」も削除してください。

。。。。。。。。。。。。。。。

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

どこ:

C:\ anyplace \ BADFOLDER ..は、作成した「空のフォルダ」であり、

C:\ wherever \ BADFOLDER ..は、「無限に繰り返されるディレクトリツリー」があるフォルダです。

。。。。。。。。。。。。。。。

ROBOCOPYの実行後..これで、2つの「空の」BADFOLDERSができました。

クリーンアップするには、両方を削除します

C:\ anyplace \ BADFOLDERおよびC:\ wherever \ BADFOLDER

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.