আপনি যদি 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।
/MIR
পরিবর্তে চেষ্টা করব : কেবল গিগলসের জন্যROBOCOPY /MIR C:\temp\EmptyDirectory C:\Storage\Folder1
চালানো উপযুক্তchkdsk
।