একটি (আপাতদৃষ্টিতে) অসীম পুনরাবৃত্ত ফোল্ডার সরানো হচ্ছে


46

কোনওভাবে, আমাদের পুরানো সার্ভার ২০০৮ (আর ২ নয়) বাক্সগুলির মধ্যে একটি আপাতদৃষ্টিতে অসীম-পুনরাবৃত্তি ফোল্ডার তৈরি হয়েছে। ব্যাকআপ এজেন্ট ফোল্ডারে পুনরাবৃত্তি করার চেষ্টা করে এবং কখনই ফিরে আসে না বলে এটি আমাদের ব্যাকআপগুলির সাথে হাবক খেলছে।

ফোল্ডারের কাঠামোটি দেখতে এমন কিছু দেখাচ্ছে:

C:\Storage\Folder1
C:\Storage\Folder1\Folder1
C:\Storage\Folder1\Folder1\Folder1
C:\Storage\Folder1\Folder1\Folder1\Folder1

... ইত্যাদি। এটি সেই ম্যান্ডেলব্রোট সেটের মতো যা আমরা 90 এর দশকে খেলতাম।

আমি চেষ্টা করেছিলাম:

  • এটি এক্সপ্লোরার থেকে মোছা। হ্যাঁ, আমি আশাবাদী।
  • RMDIR C:\Storage\Folder1 /Q/S - এই ফিরে আসে The directory is not empty
  • ROBOCOPY C:\temp\EmptyDirectory C:\Storage\Folder1 /PURGE - এটি রোবোকপি.এক্স্সি ক্র্যাশ হওয়ার কয়েক মিনিট আগে ফোল্ডারগুলির মধ্যে দিয়ে যায়।

কেউ কি এই ফোল্ডারটি ভাল করার জন্য বন্ধ করার উপায়ের পরামর্শ দিতে পারে?


1
আমি /MIRপরিবর্তে চেষ্টা করব : কেবল গিগলসের জন্য ROBOCOPY /MIR C:\temp\EmptyDirectory C:\Storage\Folder1চালানো উপযুক্ত chkdsk
jscott

1
/MIRমনে হয় দীর্ঘস্থায়ী হতে পারে তবে শেষ পর্যন্ত খুব বেশি বোমা ফাটিয়েছিল ("রোবোকপি কাজ বন্ধ করে দিয়েছে")। আমি কিছু করতে একটু ভয় পাচ্ছি chkdsk; এটি বেশ পুরানো সার্ভার এবং আমি ভেবে উদ্বিগ্ন যে এই সমস্যাটি বড় ফাইল সিস্টেম সমস্যার সূচক ...
কেনেডি

7
একটি লিনাক্স (উবুন্টু / সেন্টোস / ফেডোরা / ...) ডেস্কটপ ট্রায়াল সিডি থেকে বুট করার চেষ্টা করুন এবং সেখান থেকে ফোল্ডারটি সরিয়ে ফেলুন।
গুন্ট্রাম ব্লহম

2
@ কেন্ড যদি আপনার ফাইল সিস্টেমের দুর্নীতির সমস্যা সন্দেহ হয় তবে আপনার অবশ্যই প্রথমে ফাইল সিস্টেমটি মেরামত করার চেষ্টা করা উচিত। ডিরেক্টরি সরানোর কৌশলগুলি চেষ্টা করা বিষয়গুলিকে আরও খারাপ করতে পারে।
jscott

1
যেহেতু (নীচে আপনার উত্তর থেকে), ডাইরেক্টরি, অসীম শুধু খুব গভীর, যদি আপনি ছিল CygWin বা UnxUtils ইনস্টল, আপনি ব্যবহার করতে পারে findগভীরতায় প্রথম ডিরেক্টরির অপসারণ করতে:find Storage/Folder1 -depth -exec rmdir {} \;
জনি

উত্তর:


45

দরকারী পরামর্শের জন্য প্রত্যেককে ধন্যবাদ।

স্ট্যাকওভারফ্লো প্রদেশে ভালভাবে বিভ্রান্ত হয়ে, আমি সি # কোডের এই স্নিপেটটি ছিটকে দিয়ে সমস্যার সমাধান করেছি। এটি Delimon.Win32.IO লাইব্রেরি ব্যবহার করে যা দীর্ঘ ফাইল পাথ অ্যাক্সেস করার সমস্যাগুলিকে বিশেষভাবে সম্বোধন করে।

এই ক্ষেত্রে যদি এটি অন্য কাউকে সাহায্য করতে পারে, এখানে কোডটি দেওয়া হয়েছে - এটি ~ 1600 এর পুনরাবৃত্তির স্তরের মধ্য দিয়ে পেয়েছিল যে আমি কোনওভাবে আটকা পড়েছি এবং সেগুলি সরাতে প্রায় 20 মিনিট সময় নিয়েছি।

using System;
using Delimon.Win32.IO;

namespace ConsoleApplication1
{
    class Program
    {
        private static int level;
        static void Main(string[] args)
        {
            // Call the method to delete the directory structure
            RecursiveDelete(new DirectoryInfo(@"\\server\\c$\\storage\\folder1"));
        }

        // This deletes a particular folder, and recurses back to itself if it finds any subfolders
        public static void RecursiveDelete(DirectoryInfo Dir)
        {
            level++;
            Console.WriteLine("Now at level " +level);
            if (!Dir.Exists)
                return;

            // In any subdirectory ...
            foreach (var dir in Dir.GetDirectories())
            {
                // Call this method again, starting at the subdirectory
                RecursiveDelete(dir);
            }

            // Finally, delete the directory, and any files below it
            Dir.Delete(true);
            Console.WriteLine("Deleting directory at level " + level);
            level--;
        }
    }
}

2
আমি চেষ্টাও করেছি, এমনকি ডেলিমন সংস্করণটি .Delete(সাধারণ System.IOসংস্করণের পরিবর্তে ) ব্যবহার করেও , যদিও এটি একটি ব্যতিক্রম ছুঁড়েছিল তা কিছুই করে বলে মনে হচ্ছে না। অবশ্যই উপরের পদ্ধতিটি ব্যবহার করে পুনরাবৃত্তিটি যুগে যুগে নিয়েছে এবং .Deleteকেবল 5-10 সেকেন্ডের জন্য জিনিসগুলিতে চিবিয়েছে। হয়তো এটি কয়েকটি ডিরেক্টরিতে ছড়িয়ে পড়ে এবং পরে ছেড়ে যায়?
কেনডি

4
আপনি কি কখনই বুঝতে পেরেছিলেন যে এটি কীভাবে শুরু হয়েছিল? কিছু সত্যই খারাপভাবে লেখা ইউজারল্যান্ড প্রোগ্রামের ত্রুটি বলে মনে হচ্ছে।
পার্থিয়ান শট

8
একটি ফাংশন 1600 বার পুনরাবৃত্তি? ওভারফ্লো অঞ্চল সত্যিই স্ট্যাক !
আলেকসান্দ্র ডাবিনস্কি

2
ঠিক যেমন একপাশে, ফোল্ডারগুলি কি কোনও কিছুর দ্বারা জনপ্রিয় হয়েছিল? আপনি যদি বিরতি ফোল্ডারগুলি অন্তর্নিবারে নির্ধারণ করতে পারেন এবং পুনরাবৃত্তির সংখ্যার দ্বারা সংখ্যাবৃদ্ধি করতে পারেন তবে এই সমস্যাটি শুরু হওয়ার সময়
আপনি (আশাবাদী

8
বাহ, খুশী তুমি এইটা শেষ করেছ। এফওয়াইআই, অফিশিয়াল মাইক্রোসফ্ট এই ধরণের পরিস্থিতিতে ফিক্স সমর্থন করে "ভলিউমের পুনরায় ফর্ম্যাট"। হ্যাঁ, গম্ভীরভাবে। : /
আশাহীন N00b

25

পুনরাবৃত্তির মোড় হতে পারে। সিসিন্টার্নালjunction থেকে একটি ফাইল এবং ডিস্ক ইউটিলিটি দিয়ে এ জাতীয় জিনিস তৈরি করা যেতে পারে ।

mkdir c:\Hello
junction c:\Hello\Hello c:\Hello

এবং আপনি এখন নিরবিচ্ছিন্নভাবে যেতে পারেন সি: \ হ্যালো \ হ্যালো \ হ্যালো .... (MAX_PATH না পৌঁছা পর্যন্ত বেশিরভাগ কমান্ডের জন্য 260 টি অক্ষর তবে কিছু উইন্ডোজ API ফাংশনগুলির জন্য 32,767 অক্ষর)।

একটি ডিরেক্টরি তালিকা দেখায় যে এটি একটি জংশন:

C:\>dir c:\hello
 Volume in drive C is DR1
 Volume Serial Number is 993E-B99C

 Directory of c:\hello

12/02/2015  08:18 AM    <DIR>          .
12/02/2015  08:18 AM    <DIR>          ..
12/02/2015  08:18 AM    <JUNCTION>     hello [\??\c:\hello]
               0 File(s)              0 bytes
               3 Dir(s)  461,591,506,944 bytes free

C:\>

জংশন ইউটিলিটিটি মুছতে:

junction -d c:\Hello\Hello

4
দুর্ভাগ্যক্রমে, একটি ন্যায়বিচার DIRআমাকে সরল ওল ডিরেক্টরিগুলি দেখায় - কোনও
ভয়ঙ্কর

2
আপনি কি সঙ্গে দ্রুত ডাবল চেক করতে পারেন junction -s C:\Storage\Folder1 ?
ব্রায়ান

3
No reparse points found:(
কেনেডি

3
আমি অবাক করে দিয়েছিলাম কি প্রকৃত উপ ডিরেক্টরিগুলির এমন গোলমাল সৃষ্টি করেছিল।
ব্রায়ান

2
dir /aনির্দিষ্ট নাম উল্লেখ না করেই '<JUNCTION>' দেখতে ব্যবহার করুন ।
ক্লো

16

কোনও উত্তর নয়, তবে আমার কাছে কোনও মন্তব্যের জন্য যথেষ্ট প্রতিনিধি নেই।

আমি একবার এমএস-ডস সিস্টেমে তত্কালীন 500 এমবি FAT16 ডিস্কে এই সমস্যাটি সমাধান করেছি। ডিরেক্টরি টেবিলে ম্যানুয়ালি ডাম্প এবং পার্স করার জন্য আমি ডস ডিবাগ ব্যবহার করেছি। আমি তখন পুনরাবৃত্ত ডিরেক্টরিটি মুছে ফেলা হিসাবে চিহ্নিত করতে একটি বিট উল্টিয়েছিলাম। আমার ডেটম্যান এবং ওয়াট 'ডস প্রোগ্রামার্স' রেফারেন্সের অনুলিপিটি আমাকে পথ দেখিয়েছে।

আমি এখনও এ নিয়ে অযৌক্তিকভাবে গর্বিত। FAT32 বা এনটিএফএস ভলিউমের উপর এমন সাধারণ ক্ষমতা রয়েছে এমন যদি কোনও সাধারণ-উদ্দেশ্যমূলক সরঞ্জাম থাকে তবে আমি বিস্মিত ও আতঙ্কিত হই। জীবন তখন খুব সহজ ছিল।


8
আমি বলব যে আপনি এটি সম্পর্কে ন্যায়সঙ্গত গর্বিত।
এমফিনি

3
আমার কাছে +1 এর কিছু মন্তব্য রয়েছে। সুন্দর সমাধান।
ক্রিস

3
আপনি এখন আপনার উত্তরের প্রথম বাক্যটি মুছতে পারেন।
AL

এটি কোনও উত্তর নয়। এটি একটি ভিন্ন অপারেটিং সিস্টেম এবং একটি ভিন্ন ফাইল সিস্টেমের গল্প। এটি (এনটি, এনটিএফএস) সমস্যার কোনও সহায়ক না হওয়ার পাশাপাশি এটি একই সমস্যা (ডস, এফএটি 16) দিয়ে কাউকে সহায়তাও করবে না কারণ এতে আসলে কোনও বিবরণ নেই।
অ্যান্ড্রু মেডিকো

@ অ্যান্ড্রু মেডিকো: আমি আপনার সাথে একমত, তাই আমার প্রথম বাক্যটি। তবে আমি আপনাকে বলছি যে সামান্য-সম্পর্কিত সমস্যা সমাধানের জন্য তথ্য কোথায় পাবেন।
রিচার্ড

8

জাভা দীর্ঘ ফাইল পাথের সাথেও ডিল করতে পারে। এবং এটি খুব দ্রুত এটি করতে পারে। এই কোডটি (যা আমি জাভা এপিআই ডকুমেন্টেশন থেকে অনুলিপি করেছি) প্রায় ১ সেকেন্ডে (উইন্ডোজ,, জাভা ৮.০ এর অধীনে) একটি ১00০০ স্তরের গভীর ডিরেক্টরি কাঠামো মুছে ফেলবে এবং স্ট্যাকের ওভারফ্লো হওয়ার ঝুঁকি ছাড়াই এটি আসলে পুনরাবৃত্তি ব্যবহার করে না।

import java.nio.file.*;
import java.nio.file.attribute.*;
import java.io.*;

public class DeleteDir {

  static void deleteDirRecur(Path dir) throws IOException {
    Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
         @Override
         public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
             throws IOException
         {
             Files.delete(file);
             return FileVisitResult.CONTINUE;
         }
         @Override
         public FileVisitResult postVisitDirectory(Path dir, IOException e)
             throws IOException
         {
             if (e == null) {
                 Files.delete(dir);
                 return FileVisitResult.CONTINUE;
             } else {
                 throw e;
             }
         }
     });
  }

  public static void main(String[] args) throws IOException {
    deleteDirRecur(Paths.get("C:/Storage/Folder1"));
  }
}

3
আমি আপনাকে ঘৃণা করি. আপনি আমাকে জবাব ব্যবহারের সাথে জড়িত এমন একটি উত্তরকে উচ্চতর করতে বাধ্য করেছেন এবং এখন আমি সমস্ত নোংরা অনুভব করছি। আমার গোসল করা দরকার.
আশাহীন N00b

আমার ক্ষমা। আমি আশা করি আপনার ট্রমা থেকে শেষ পর্যন্ত সেরে উঠবেন। তবে মাইক্রোসফ্ট (সি #) দ্বারা উন্নত একটি ভাষা কি আসলেই আরও উন্নত?
স্পাইডারপিগ

5
আমি আজকাল মূলত একটি উইন্ডোজ লোক, তাই হ্যাঁ, হ্যাঁ এটি। আমার নিয়োগকর্তার পরিবেশে প্রায় এক হাজার ক্লায়েন্টকে জেআরইর 5 টি নির্দিষ্ট, বিভিন্ন সংস্করণ বজায় রাখার কারণে আমি জাভার বিরুদ্ধে তিক্ত এবং পক্ষপাতদুষ্টও হতে পারি, যার মধ্যে একটি ২০০৯-এর, তারিখের জন্য, ক্র্যাপের কারণে ... এর, ম্যালওয়্যার ... আহ, "এন্টারপ্রাইজ-ওয়াই" সফ্টওয়্যার স্যুট যা আমরা ব্যবসায়িক সমালোচনামূলক অ্যাপ্লিকেশনগুলির জন্য ব্যবহার করি।
আশাহীন N00b

6

আপনি যদি chdirডিরেক্টরিতে প্রবেশ করেন এবং সেক্ষেত্রে আপেক্ষিক পাথ ব্যবহার করেন তবে আপনাকে দীর্ঘ পথের নাম প্রয়োজন হবে না rmdir

অথবা, যদি আপনার কোনও পসিক্স শেল ইনস্টল থাকে, বা এটি ডস সমতুল্য পোর্ট করে:

# untested code, didn't bother actually testing since the OP already solved the problem.

while [ -d Folder1 ]; do
    mv Folder1/Folder1/Folder1/Folder1  tmp # repeat more times to work in larger batches
    rm -r Folder1     # remove the first several levels remaining after moving the main tree out
    # then repeat to end up with the remaining big tree under the original name
    mv tmp/Folder1/Folder1/.../Folder1 Folder1 
    rm -r tmp
done

(আপনি লুপের অবস্থার জন্য এটির নামকরণ করে সেখানে শেল ভেরিয়েবল ব্যবহার করা আমার মতো লুপটি আনলোলিং করার অন্য বিকল্প)

এটি কেন্ডির সমাধানের সিপিইউ ওভারহেডকে এড়িয়ে চলে, যা ওএসকে গাছটিকে উপরের থেকে তৃতীয় nস্তরে প্রতিবারই একটি নতুন স্তর যুক্ত করার সাথে সাথে অনুমতিগুলি পরীক্ষা করার জন্য বাধ্য করে। তাই sum(1, n) = n * (n-1) / 2 = O(n^2)সময় জটিলতা রয়েছে। শৃঙ্খলা শুরু হওয়ার আগে থেকেই সমাধানগুলি হওয়া উচিত O(n), যদি না উইন্ডোজকে তার পিতামাতার ডিরেক্টরিটির নাম পরিবর্তন করার সময় কোনও গাছকে অতিক্রম করতে হয়। (লিনাক্স / ইউনিক্স না।) যে সমাধানগুলি chdirগাছের নীচে চলে যায় এবং সেখান থেকে আপেক্ষিক পাথগুলি ব্যবহার করে, ডিরেক্টরিগুলি যখন সেগুলি chdirব্যাকআপ করে দেয় সেগুলি সরিয়ে ফেলতে পারে O(n), এমনও হওয়া উচিত , ধরে নেওয়া এবং ওএসকে আপনার সমস্ত চেক করার দরকার নেই আপনি যখন কোথাও সিডি করার সময় জিনিসগুলি করেন তখন প্রতিটি সিস্টেমে অভিভাবক ডিরেক্টরিগুলি কল করে।

find Folder1 -depth -execdir rmdir {} +গভীর ডিরেক্টরিতে সিডি করার সময় rmdir চালিত হবে। বা আসলে, অনুসন্ধানের -deleteবিকল্প ডিরেক্টরিতে কাজ করে এবং বোঝায় -depth। সুতরাং find Folder1 -deleteসঠিক একই জিনিস করা উচিত, কিন্তু দ্রুত। হ্যাঁ, জিএনইউতে একটি ডিরেক্টরি স্ক্যান করে, আপেক্ষিক পাথ সহ সাব-ডিরেক্টরিতে সিডি করে, তারপরে rmdirকোনও আপেক্ষিক পথের সাহায্যে লিনাক্সের সন্ধান পাওয়া যায় chdir("..")। এটি আরোহণের সময় ডিরেক্টরিগুলি পুনরায় ছাড়ায় না, তাই এটি O(n)র‍্যাম গ্রাস করবে ।

: এটা সত্যিই একটি পড়তা ছিল straceশো এটা আসলে ব্যবহার unlinkat(AT_FDCWD, "tmp", AT_REMOVEDIR), open("..", O_DIRECTORY|...)এবং fchdir(the fd from opening the directory), একটি গুচ্ছ সঙ্গে fstatখুব মিশিয়ে কল। ডিরেক্টরিটি ট্রি চলমান অবস্থায় সংশোধিত না হয়ে থাকলে প্রভাবটি একই হয়।

সম্পাদনা: কেবল কিকের জন্য, আমি এটি জিএনইউ / লিনাক্সে (উবুন্টু 14.10, একটি 2.4GHz প্রথম-জেনার কোর 2 ডুও সিপিইউতে, একটি ডাব্লুডি 2.5 টিবি গ্রিন পাওয়ার ড্রাইভ (ডাব্লুডি 25 ইজেডআরএস) এর এক্সএফএস ফাইল সিস্টেমে চেষ্টা করেছি।

time mkdir -p $(perl -e 'print "annoyingfoldername/" x 2000, "\n"')

real    0m1.141s
user    0m0.005s
sys     0m0.052s

find annoyingfoldername/ | wc
   2000    2000 38019001  # 2k lines / 2k words / 38M characters of text


ll -R annoyingfoldername
... eventually
ls: cannot access ./annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername/annoyingfoldername: File name too long
total 0
?????????? ? ? ? ?            ? annoyingfoldername

time find annoyingfoldername -delete

real    0m0.054s
user    0m0.004s
sys     0m0.049s

# about the same for normal rm -r,
# which also didn't fail due to long path names

(mkdir -p ডিরেক্টরি এবং কোনও অনুপস্থিত পাথ উপাদান তৈরি করে)।

হ্যাঁ, 2k rmdir অপ্সের জন্য সত্যিই 0.05 সেকেন্ড। এক্সএফএস জার্নালে একসাথে মেটাডেটা অপারেশনগুলিতে ব্যাচিংয়ে যথেষ্ট ভাল, যেহেতু তারা 10 বছর আগের মেটা ডেটা অপ্সকে ধীর করে দিয়েছিল।

Ext4-এ, 0 মি 0.279 গুলি তৈরি করুন, মুছে ফেলুন এখনও মুছে ফেলুন 0m0.074s।


কৌতূহলী হয়ে উঠেছে এবং এটি লিনাক্সে চেষ্টা করে। দেখা যাচ্ছে যে মানক জিএনইউ সরঞ্জামগুলি দীর্ঘ পথগুলির সাথে সমস্ত ভাল, কারণ তারা দৈত্য দীর্ঘ পাথ দিয়ে সিস্টেম কল করার চেষ্টা না করে গাছটিকে পুনরুদ্ধার করে। এমনকি কমান্ড লাইনের 38k পাথটি পাস করার পরেও এমকেডির ঠিক আছে!
পিটার কর্ডেস

0

কিছু জাভা অ্যাপ্লিকেশন করেছে এমন 5000+ ডিরেক্টরি-গভীর ফোল্ডার জগাখিচুড়ি দিয়ে আমি একই সমস্যায় পড়েছি এবং আমি একটি প্রোগ্রাম লিখেছিলাম যা আপনাকে এই ফোল্ডারটি সরাতে সহায়তা করবে। পুরো উত্স কোডটি এই লিঙ্কটিতে রয়েছে:

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

এটি কিছুক্ষণ পরে পুরো জিনিসটি সরিয়ে ফেলল, তবে এটি কাজটি পরিচালনা করতে সক্ষম হয়েছিল, আমি আশা করি যে এটি তাদের (যেমন আমি) একই হতাশাজনক সমস্যায় পড়তে সহায়তা করে


দয়া করে কেবল লিঙ্কযুক্ত উত্তর পোস্ট করবেন না। আপনার লিঙ্ক থেকে সর্বাধিক গুরুত্বপূর্ণ তথ্যটি পোস্টে দেওয়া উচিত এবং লিঙ্কটি রেফারেন্সের জন্য সরবরাহ করা উচিত।
ফ্রেডেরিক নীলসেন

ওহ দুঃখিত, এটি একটি প্রোগ্রাম, এবং আমি সত্যিই এখানে সমস্ত উত্স কোড পোস্ট করতে চাইনি ... আমি মনে করি এটি বেশ পরিষ্কার যে আমি একটি প্রোগ্রাম লিখেছি এবং আমি এই লিঙ্কটি অনুসরণ করে এটি হোস্ট করছি, এবং অনুপ্রেরণা এবং সমস্ত কিছু আছে উত্তরটি, সুতরাং এটি আমার কাছে একেবারে স্পষ্ট মনে হচ্ছে এটি কেবল একটি লিঙ্ক-উত্তর নয়, তবুও, আমি উল্লেখ করব (আরও স্পষ্টভাবে) যে এটি একটি সফ্টওয়্যার যা এই সমস্যা সমাধানের জন্য চালিত হতে বোঝায়
Imanol Barba Sabariego

0

আমারও এটি ছিল, যদিও স্ট্যান্ডোলোইন উইন্ডোজ 10 সিস্টেমে। সি: \ ব্যবহারকারীর নাম \ পুনরাবৃত্তি eat পুনরাবৃত্তি \ পুনরাবৃত্তি \ পুনরাবৃত্তি \ পুনরাবৃত্তি \ অনন্ত থেকে আপাতদৃষ্টিতে পুনরাবৃত্তি করুন।

আমি উইন্ডোজ বা কমান্ড প্রম্পট ব্যবহার করে প্রায় ৫০ তম স্থানে নেভিগেট করতে পারি এবং এর পরে আর কিছু করতে পারি না। আমি এটি মুছতে বা এটিতে ক্লিক করতে পারি না, ইত্যাদি

সি আমার ভাষা তাই শেষ পর্যন্ত আমি সিস্টেম কলগুলির একটি লুপ সহ একটি প্রোগ্রাম লিখেছিলাম, যা তারা ব্যর্থ হওয়া অবধি পুনরাবৃত্তি করে। আপনি ডস ব্যাচ এমনকি কোনও ভাষায় এটি করতে পারেন। আমি tmp নামে একটি ডিরেক্টরি বানিয়েছি এবং পুনরাবৃত্তি that এর মধ্যে পুনরাবৃত্তি করলাম, এখন খালি খালি পুনরাবৃত্তি ফোল্ডারটি মুছে ফেলেছি এবং tmp \ বর্তমান ফোল্ডারে পুনরাবৃত্তি করুন। বারবার!

 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);
 }

চেকসিস্টেম কেবল একটি সিস্টেম () কল চালায় এবং রিটার্ন মানটি পরীক্ষা করে ব্যর্থ হলে বন্ধ করে দেয়।

গুরুত্বপূর্ণভাবে, এটি বেশ কয়েকবার ব্যর্থ হয়েছিল। আমি ভেবেছিলাম সম্ভবত আমার প্রোগ্রামটি কাজ করছে না, বা এটি অসীম দীর্ঘকাল পরে। যাইহোক, সিস্টেম কলের সাথে আমার আগে এটি ছিল, জিনিসগুলি সমন্বয় না ঘটে, তাই আমি আবার প্রোগ্রামটি চালিয়েছি এবং এটি যেখান থেকে ছেড়ে গেছে সেখান থেকে এটি চালিয়ে গেছে, তাই তাত্ক্ষণিকভাবে ভাববেন না যে আপনার প্রোগ্রামটি কাজ করছে না। সুতরাং মোট, প্রায় 20 বার এটি চালানোর পরে, এটি সমস্তগুলি সাফ করেছে। মোট, মূলত এটি প্রায় 1280 ফোল্ডার ছিল। কী কারণে তা ঘটেছিল তা ধারণা নেই। ক্রেজি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.