ফ্ল্যাট ডিরেক্টরি গঠন


12

আমি ফোল্ডার মধ্যে একটি গুচ্ছ ফোল্ডার আছে। এটার মত

Root Folder
    -- Folder 1
    -- Folder 2
    -- Folder 3
    -- Folder 4

আমি সকল ফোল্ডার ভেঙ্গে ফেলতে চাই যাতে ফোল্ডার 1, ফোল্ডার 2, ফোল্ডার 3 এর অধীনে সমস্ত ফাইল ... ফোল্ডার n রুট ফোল্ডারের অধীনে বিদ্যমান।

উইন্ডোজ এ এই দ্রুততম উপায় কি?


5
এটা নির্ভর করে, আপনি কিভাবে ডুপ্লিকেট ফাইল নাম হ্যান্ডেল করতে চান?
Mark Allen

উত্তর:


15

বিশেষ সরঞ্জাম বা এমনকি স্ক্রিপ্টিং ব্যবহার করার কোন কারণ নেই। শুধু এক্সপ্লোরার মধ্যে অনুসন্ধান ফাংশন ব্যবহার করুন।

  1. আপনি এক্সপ্লোরার flatten করতে চান ফোল্ডার খুলুন।
  2. একটি নতুন ফোল্ডার তৈরি করুন, সমস্ত ফাইল নির্বাচন করুন (কিন্তু ফোল্ডার নয়), এবং সেই ফোল্ডারে টেনে আনুন (এটি সেই ফাইলগুলির দুটি কপিগুলি এড়াতে পারবে।)
  3. অনুসন্ধান বাক্সে (ঠিকানা বারের ডানদিকে একটি), টাইপ করুন * এবং এন্টার চাপুন।
  4. তালিকা populates পর, ডান ক্লিক করুন এবং সব নির্বাচন করুন, তারপর ডান ক্লিক করুন এবং কাটা।
  5. মূল ফোল্ডারে ফিরে আসার জন্য ফিরে বোতাম টিপুন, তারপরে ডান-ক্লিক করুন এবং পেস্ট করুন।
  6. যদি আপনার কোন সদৃশ নাম থাকে, তাহলে আপনাকে কীভাবে মোকাবেলা করতে হবে তা জানানো হবে। আপনার ব্যবহারের ক্ষেত্রে সবচেয়ে উপযুক্ত বিকল্প চয়ন করুন। (আমি উভয় ফাইল কপি করা হবে অনুমান করা হবে।) আবার অনুরোধ করা এড়ানোর জন্য, নিচের চেকবাক্সের সাথে সব ফাইলগুলিতে এটি প্রয়োগ করতে ভুলবেন না।
  7. সমস্ত ফোল্ডার নির্বাচন করুন, নির্বাচিত ফাইলগুলির সংখ্যা সম্পর্কে পপআপটি দেখে তারা খালি রয়েছে এবং সেগুলি মুছে দিন।

যদি আপনার কাছে একটি স্ক্রিপ্ট থাকে তবে আপনি এটি শুরু করতে এবং এটি ভুলে যেতে পারেন, এটিও করা যেতে পারে। প্রতিস্থাপন কমান্ড mv *\* . বেশ সহজ ( for /r %f in (*.*) do @move "%~f" . ) তবে আমি নিশ্চিত যে আপনি ডিক্লেলেটগুলি পরিচালনা করতে চান, @ নিকোল হ্যামিল্টনের উত্তর হিসাবে তাদের পিছনে ফেলে রেখে। সদৃশ ফাইলের নামটিতে একটি সংখ্যা যোগ করা সম্ভবত এটি করার সবচেয়ে সহজ উপায়।

নোটপ্যাডে নিম্নলিখিত ব্যাচ ফাইল অনুলিপি করুন এবং আটকান এবং এটি "flatten.cmd" হিসাবে সংরক্ষণ করুন (উদ্ধৃতি চিহ্ন সহ):

@echo off
cd "%~1"
md tempryfolder
move *.* tempryfolder
for /r %%f in ("*.*") do call :START "%%~f"
for /r /d %%f in (*.*) do rd "%%~f" 
GOTO :EOF
:START
setlocal
If exist "%~n1%~x1" set /a num=2
:LOOP
If exist "%~n1%num%%~x1" (
    set /a num+=1
    goto loop
)
move "%~1" "%~n1%num%%~x1"

স্ক্রিপ্টটি ব্যবহার করতে, যে ফোল্ডারটি আপনি উপরের দিকে ফ্ল্যাট করতে চান তা কেবল টেনে আনুন।


অনুরূপ কিন্তু বুঝতে সহজ: superuser.com/a/523854/433830
aparente001

দ্রষ্টব্য: এই স্ক্রিপ্টটি মূলত একটি ফর্ক বোমা। আমি হাজার হাজার সাবডিরেক্টরি এবং হাজার হাজার সাবফাইলের সাথে একটি ফোল্ডারে এটি ব্যবহার করছি এবং মেমরি পদাঙ্কটি ধীরে ধীরে বাড়ছে। আমার মনে হয় না যে আমি ওওএম-এর সমস্যাগুলি চালাতে যাচ্ছি, কিন্তু এটি মনে রাখা কিছু।
Nzall

@ নাজাল আমি বিশ্বাস করতে পারছি না যে এটি করতে পারে, কিন্তু আমি মাইক্রোসফটকে দোষারোপ করবো, আমার কোড নয়। আমি যা করি তা ব্যাচ ফাইলে একাধিক বার একটি সাবরুটিনকে কল করে। এবং আমি কখনই একের বেশি রান করি না: প্রত্যেকটি সাবরুটিন সম্পন্ন না হওয়া পর্যন্ত, শুধুমাত্র একবারে একটি প্রক্রিয়া চালায়। কত মেমরি আমরা ব্যবহার হচ্ছে কথা বলা হয়?
trlkly

@ ট্রলক্লি এক পর্যায়ে এটি 2 গিগাবাইট পর্যন্ত গিয়েছিল, যদিও আমার কাছে বেশিরভাগ ফোল্ডার এবং সাবফোল্ডার ছিল, প্রায় 75,000 ফাইল এবং হাজার হাজার ফোল্ডার ছিল। কয়েক মুহূর্ত পরে এটি প্রায় 8-900 মেগাবাইট ফিরে নিচে। যদিও সদৃশ ফাইল লোড ছিল। আমি 7,500 ফাইল জাভাস্ক্রিপ্ট লাইব্রেরীর 1২ টি কপি ফ্ল্যাট করছিলাম তাই কয়েকটি ফাইলের সাথে কয়েকটি সফ্টওয়্যার কীভাবে একটি ফোল্ডার পরিচালনা করবে তা আমি পরীক্ষা করতে পারি।
Nzall

@ নাজাল এটা আমার কাছে অবিশ্বাস্যভাবে অদ্ভুত। কিছুই স্ক্রিপ্ট যে কি করা উচিত। এটি একটি সাবরুটিন যা ফাইলকে ক্রমবর্ধমান করতে একটি একক পরিবর্তনশীলকে পুনরায় ব্যবহার করে। আমি জিজ্ঞাসা করতে পারে কি SO বা কিছু যেমন বড় মেমরি ব্যবহার হতে পারে।
trlkly

3

আপনি যে ফোল্ডারটিতে ফ্ল্যাট এবং অনুসন্ধান করতে চান সেটি নেভিগেট করে আপনি উইন্ডোজ এক্সপ্লোরারে ফ্ল্যাট করতে পারেন System.Kind:<>folder ফলাফল থেকে ফোল্ডার বাদ দিতে।

আপনি CTRL + A দিয়ে সমস্ত ফাইল নির্বাচন করতে পারেন এবং একটি নতুন ফোল্ডারে অনুলিপি এবং আটকান। নোট করুন যে উইন্ডোজ এক্সপ্লোরার আপনাকে ডুপ্লিকেট ফাইল নামগুলি কীভাবে মোকাবেলা করবে তা জিজ্ঞাসা করবে।

enter image description here


1
উল্লেখ্য যে এই কাজ করার জন্য আপনাকে সংশ্লিষ্ট স্থানীয় অনুবাদে "ফোল্ডার" টাইপ করতে হবে (উদাহরণস্বরূপ, ইতালিয়ানতে System.Kind:<>cartella )
JohnKiller

1
আমি এই অস্তিত্ব কোন ধারণা ছিল, আপনাকে ধন্যবাদ
Tim Miller

0

এই ধরনের জিনিস একটি ইউনিক্স শেল দিয়ে সহজ। আপনি আমার নিজের সাথে কি করতে পারেন এখানে হ্যামিলটন সি শেল (অন্তর্ভুক্ত করা বিনামূল্যে সংস্করণ ।) আপনি খুব অনুরূপ কিছু করতে পারে Cygwin ব্যাশ।

mv *\* .

আপনার ডিরেক্টরি সত্যিই বিশাল হলে, এটি সম্ভব যে উইল্ড্ড্ড একটি শিশু প্রক্রিয়াতে যাওয়ার জন্য উইন্ডোজের জন্য একটি লম্বা লম্বা লাইন হতে পারে। (জানালা গুলো CreateProcess কলটি 32 কে ইউনিকোড অক্ষরগুলিতে যুক্তি তালিকার সীমাবদ্ধ করে।) কিন্তু সি শেলের অভ্যন্তরীণভাবে কোনও সীমা নেই, তাই আপনি পুরো তালিকাতে এইভাবে পুনরাবৃত্তি করতে পারেন:

foreach i ( *\* )
   mv $i .
end

@ মার্কআলেনের উপরের বিন্দুতে, এই ধরনের অনুমান আছে যে কোন সদৃশ নাম নেই। যদি থাকে, তালিকাতে পরবর্তী কপি পুরোনোদের উপর ওভাররাইট করবে। যদি এটি একটি উদ্বেগের বিষয় হয় তবে আপনি ফাইলগুলির উপর পুনরাবৃত্তি করতে পারেন, mv আপনি যদি overwriting না শুধুমাত্র তাদের inging। দ্য :t অপারেটর হয় লেজ অপারেটর । দ্য -e অপারেটর হয় ফাইল পরীক্ষা বিদ্যমান

foreach i ( *\* )
   if ( -e $i:t ) then
      echo -2 $i not moved because it already exists
   else
      mv $i .
   end
end

এটি এখনও খালি ডিরেক্টরিগুলিকে ছেড়ে দেয়, যা আপনি খালি হয়ে যাওয়ার পরে না চান। এটি mattered যদি পরবর্তী পুনরাবৃত্তি হতে পারে।


সাইগুইন ব্যবহার করে & gt; এমভি *। এমভি: stat * `করতে পারবেন না * ': অনুরূপ কোন ফাইল বা ডিরেক্টরি নেই
More Than Five

সিগুইন ইন bash, mv */* . আমার জন্য কাজ কর.
Nicole Hamilton

3
কিছু লোক ইউনিক্সিজম এ তাই সংশোধন করা হয়েছে ... যদি আপনি সত্যিই উইন্ডোজ 7 এ স্ক্রিপ্টিং করতে চান, পাওয়ারশেল আছে, আপনি কিছু বাগাস সিমুইন মত সিমুলেটর প্রয়োজন হবে না।

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