পুনরাবৃত্তভাবে উইন্ডোজ খালি ডিরেক্টরি মুছুন


93

আমার আমার উইন্ডোজ 7 মেশিনে একটি ডিরেক্টরি আছে যা কয়েক হাজার উপ-ডিরেক্টরি না থাকলে শত শত রয়েছে। কারও কারও কাছে ফাইল রয়েছে, কারও কাছে নেই। আমি সমস্ত খালি ডিরেক্টরি মুছতে চাই।

ডেল এবং rmdir ডস কমান্ডটি দেখে, দেখে মনে হচ্ছে এমন নয় যে আপনি সমস্ত ফাইল মুছে না ফেলে পুনরাবৃত্তভাবে এটি করতে পারেন। কমান্ড লাইন থেকে এটি করার কোনও উপায় আছে?


আমি অবাক হয়েছি এই প্রশ্নের কোনও সহজ উত্তর নেই।
বিলপিজি

@billpg: এটা পেতে পারে সহজ হিসাবে: xcopy FROMDIR TODIR /s। এই তাই উত্তর দেখুন: stackoverflow.com/a/14742810
eckes

1
এক্সসিপিওয়াই ডিরেক্টরি মুছে ফেলে?
বিলপিজ

1
এটি ROBOCOPY ব্যবহার করে সহজেই করা যায়। বিস্তারিত জানার জন্য নীচে আমার উত্তর দেখুন।
বরুণ শর্মা

উত্তর:


115

আপনি খালি ডিরেক্টরি সরান ইউটিলিটি ব্যবহার করতে পারেন ।

বিকল্পভাবে আপনি এই ওয়ান-লাইনার ব্যাচ ফাইলটি ( ডাউনলোডস্কোয়াড থেকে ) ব্যবহার করতে পারেন :

for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"

(যদি ব্যাচ ফাইলের অভ্যন্তরে ব্যবহৃত হয় তবে এর %dসাথে প্রতিস্থাপন করুন %%d)

এটি কাজ করে কারণ rdফাইলগুলি ধারণকারী ডিরেক্টরিটিকে সরিয়ে দেবে না।


6
পিএস আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি প্রথমে জিইউআই-ভিত্তিক সরঞ্জামটি চেষ্টা করে দেখুন, এমন কোনও কমান্ড-লাইন কমান্ড চেষ্টা করার আগে যা সম্ভাব্যভাবে সমস্ত ফাইল মুছতে পারে।
ক্যালিবান

1
এটি সত্যই ফাঁকা আছে তা নিশ্চিত করুন। একটি লুকানো ডেস্কটপ.ইনিকে এখনও একটি ফাইল হিসাবে বিবেচনা করা হয়। থাম্বস.ডিবি হিসাবে একই। এটি যদি কাজ করে কিনা তা আপনি যাচাই করতে চান তবে খালি এবং জনবহুল ডিরেক্টরিগুলির সাথে একটি ডিরেক্টরি ডিরেক্টরি তৈরি করুন। এটি কাজ করে, আমি যাচাই করেছি।
ক্যালিবান

1
হাঁ। এটা কাজ করে। আমার ভুল.
ইবিগ্রিন

8
/ f% d এর জন্য ('dir / s / b') rmdir "% d" কাজ করা উচিত কারণ rmdir একটি খালি ফোল্ডারটি অপসারণ করতে পারে না
seanyboy

1
প্রসঙ্গ মেনুতে এই কার্যকারিতাটি কীভাবে যুক্ত করবেন তা সন্ধান করার জন্য stackoverflow.com/a/34025977/694360 দেখুন 43
মিমজেজ

49

আপনি আরওবোকপি ব্যবহার করতে পারেন। এটি খুব সহজ এবং বৃহত শ্রেণিবিন্যাসের ভিতরে খালি ফোল্ডারগুলি মুছতেও এটি ব্যবহার করা যেতে পারে।

ROBOCOPY folder1 folder1 /S /MOVE

এখানে উত্স এবং গন্তব্য উভয়ই হ'ল folder1অন্য ফাইলগুলি ভিন্ন ফোল্ডারে না নিয়ে কেবল খালি ফোল্ডারগুলি মুছতে হবে। /Sবিকল্পটি হ'ল খালি ফোল্ডারগুলি অনুলিপি (চলন্ত, উপরের ক্ষেত্রে) এড়ানো। একই ড্রাইভের মধ্যে ফাইলগুলি সরানো হওয়ায় এটি আরও দ্রুত হয়।


1
ম্যাজিক। সুতরাং এটি সমস্ত খালি খালি ফোল্ডারগুলিকে একই স্থানে নিয়ে যায় যা তারা ইতিমধ্যে ছিল (তাই কিছুই হয় না?) এবং খালি ফোল্ডারগুলি এড়িয়ে যায়? তবে তারপরে: এগুলি এড়িয়ে যাওয়ার ফলে মুছে ফেলা হবে কেন? এবং এই পদক্ষেপে নেস্টেড ফোল্ডারগুলিতে প্রবেশ করবে না folder1? ভীতিজনক, যদি না ভাল পরীক্ষা করা হয়।
আরজান

3
@ আরজান আমি এটি পরীক্ষা করেছি এবং এটি পুরোপুরি কার্যকর! এর কার্যকারিতা বুঝতে, এটি খালি ফোল্ডার বাদে সমস্ত ফাইলকে আলাদা আলাদা স্থানে নিয়ে যাওয়া এবং তারপরে বাম-পিছনের খালি ফোল্ডারগুলি মুছার মতো। /MOVEফাইলগুলি প্রথমে অনুলিপি করে এবং তারপরে অনুলিপি করার পরে উত্স ফাইলটি মুছে দেয়। সুতরাং, যেমন /Sব্যবহৃত হয়, এটি খালি নয় ফোল্ডারগুলি গন্তব্যে অনুলিপি করে (উপরের ক্ষেত্রে একই ফোল্ডার)। তারপরে, এটি খালি ফোল্ডারগুলি মুছে দেয় (যেমন, এই ধারণাটি যে খালি ফোল্ডারগুলি ইতিমধ্যে অনুলিপি করা হয়েছে)। না, এটি নেস্টেড ফোল্ডারগুলিতে সরিয়ে দেয় নাfolder1 , কারণ রোবোকপি ফোল্ডারগুলি পুনরাবৃত্তভাবে সরানো হয় moves
বরুণ শর্মা

3
এটি এমনকি ইউএনসি পাথগুলির সাথেও কাজ করে (কমপক্ষে উইন 7 এ)! উজ্জ্বল!
অ্যারিওচ 'দ্য

2
এটি কোনও তৃতীয় পক্ষের সফ্টওয়্যার ছাড়াই একটি খুব মার্জিত সমাধান। ধন্যবাদ!
মার্কাস মঙ্গেলসডর্ফ

1
এটি ঠিক তার যাদু করেছে এবং পুরোপুরি কাজ করেছে। ধন্যবাদ!
চার্লিডিসি 5

15

যেহেতু সাইগউইন জিএনইউ অনুসন্ধানের সাথে আসে, আপনি এটি করতে পারেন:

find . -type d -empty -delete

অথবা কোনও ফোল্ডার আর উপস্থিত না থাকলে শব্দটি এড়াতে:

find . -type d -empty -execdir rmdir {} +

এটি এখন উইন্ডোজ 10 ব্যাশ ব্যবহার করেও করা যেতে পারে।
মার্চ হো

আমার উইন্ডোজ 10 ইনস্টল করার জন্য এটি ( find . -type d -empty -delete) নিম্নলিখিত ত্রুটির সাথে কমান্ড প্রম্পট থেকে ব্যর্থ:FIND: Parameter format not correct
ইমপ্রেস নেট নেট ডেভেলপার

7

বিনামূল্যে ইউটিলিটি EmptyFolderNuker আপনার পছন্দসই একটি বেস ফোল্ডার থেকে এটি সূক্ষ্ম কাজ করে। এটি কেবল খালি উপ-ডিরেক্টরিগুলি সহ সেই ডিরেক্টরিগুলি সরিয়ে দেয়।


1
ওয়ান-লাইনার ব্যাচের ফাইলটি আমার পক্ষে কাজ করে নি (আমি ত্রুটিটি পেয়েছি "%% d এই সময়ে অপ্রত্যাশিত ছিল।"), এবং খালি ডিরেক্টরিগুলি সরান প্রোগ্রাম ইনস্টল হবে না (এটি লিঙ্কযুক্ত পৃষ্ঠায় বলে যে এটি নেই উইন্ডোজ 7 এর সাথে সামঞ্জস্যপূর্ণ)। এই প্রোগ্রামটি কবজির মতো কাজ করেছিল।
ফিনিক্স

1
যেমন ব্যবহারকারী 36580 নীচে লিখেছেন, "সম্ভবত আপনি কমান্ড লাইন থেকে সরাসরি চলেছেন। সেক্ষেত্রে ডাবল %% কে একক% এ পরিবর্তন করুন"
লাচলান ম্যাকডি।

1
খাঁটি কমান্ড-লাইন সংস্করণে আমি এটি পছন্দ করি কারণ এটি আপনাকে মুছে ফেলা জিনিসগুলির পূর্বরূপ দেখতে দেয়। আপনি সর্বদা এটি ব্যবহার করে কমান্ড-লাইন থেকে কল করতে পারেন "%~dp0\EmptyFolderNuker.exe" %cd%
জেরোয়েন ওয়েয়ার্ট প্লুমাইমার

1
@ rob-kam "EmptyFolderNuker" এর URL টি আর পাওয়া যায় না।
পিটারকো

@ পিটারকো ধন্যবাদ, এখনই স্থির।
রব কাম

0

আপনি যদি সাইগউইন ইনস্টল করে থাকেন তবে আপনি এটি করতে পারেন:

find -type d -exec rmdir {} \;

4
অগত্যা। এটি কেবল খালি উপ-ডিরেক্টরি সহ ডিরেক্টরি মুছতে পারে না। আপনি এটি বিপরীত হতে পারে। সন্ধান করুন-টাইপ ডি -প্রিন্ট 0 | ট্যাক | xargs -0 rmdir
রায়ান থমসন

"ট্যাক" এর আগে আমি কখনই জানতাম না। আসলেই নিফটি!
অ্যান্টনি জর্জিও

1
বা ব্যবহার । বিকল্প বলে আউটপুট ক্রম বিপরীত মত কিছু করতে - এটা গভীরতম ডিরেক্টরির মাত্রা প্রথম যায়, তারপর তার পথ কাজ করে ব্যাক আপ। find (starting-directory) -depth -type d ...-depthfind
জি ম্যান

0

আপনি যদি ইমাসে কাজ করছেন (এই প্ল্যাটফর্ম-অজোনস্টিক তৈরি করছেন), নিম্নলিখিত কাজগুলি:

(defun *-delete-empty-directories (root-directory)
  "Recursively delete empty directories in ROOT-DIRECTORY.

When called from dired, `dired-current-directory' is used for
ROOT-DIRECTORY."

  ;; Interface
  (interactive (list (if (eq major-mode 'dired-mode)
                         (expand-file-name (dired-current-directory))
                       (read-from-minibuffer "Root directory: "))))
  (when (or (null root-directory) (string= "" root-directory))
    (user-error "No root directory provided"))
  (when (called-interactively-p 'interactive)
    (unless (yes-or-no-p (format "Delete all non-empty directories in `%s'? "
                                 root-directory))
      (user-error "Directory `%s' has been left untouched" root-directory)))

  ;; Implementation
  (require 'f)
  (let ((entries (f-directories root-directory)))
    (while entries
      (let ((curdir (car entries)))
        (when (f-directories curdir)
          (*-delete-empty-directories curdir))
        (unless (f-entries curdir)
          (delete-directory curdir)
          (message "Directory deleted: `%s'" curdir))
        (setq entries (cdr entries)))))

... দয়া করে আমাকে বলুন ইম্যাক্সে এটি সম্পাদন করার জন্য আপনাকে এগুলি সমস্ত টাইপ করতে হবে না।
হাশিম

1
@ হাশিমের ধারণাটি হ'ল আপনি এটি আপনার আর ডি তে সংজ্ঞায়িত করেছেন এবং তারপরে একটি চাবির সাথে আবদ্ধ। প্রযুক্তিগতভাবে আমি চাইলে এটির সাথে আবদ্ধ থাকতে Dপারি, তবে যেহেতু আমার এটির সাধারণ প্রয়োজন নেই, তাই আমাকে টাইপ করতে হবে M-x *ded RETএবং হ'ল বম। (যদি সত্যিই আমাকে প্রতিবার এটি টাইপ করতে হয়, আপনি একেবারেই ঠিক বলেছেন যে এটি অযৌক্তিক হবে - ভাগ্যক্রমে ঘটনাটি নয়))
শন অলরেড

যথেষ্ট ফর্সা, এটি আরও প্রশ্রয়জনক শোনায়।
হাশিম

এর M-x *ded RETকোন তাত্পর্য আছে বা এলোমেলো? যদি দ্বিতীয়টি হয়, আপনি যে সমস্ত শর্টকাটগুলি অর্পণ করেছেন সেগুলি আপনি কীভাবে ট্র্যাক করবেন emacs? মুখস্ত করা কি যথেষ্ট বা আপনি এগুলি সন্ধান করার জন্য নিজেকে খুঁজে পান?
হাশিম

1
@ হাশিম *dedসম্পূর্ণ ফাংশন নামের জন্য একটি সংক্ষেপণ *-delete-empty-directories। অনেক সমাপ্তি ইঞ্জিন (যেমন আইভির মতো, আমি যেটি ব্যবহার করি) এই ধরণের ফাজি ম্যাচটি বোঝে। তাদের মুখস্থ রাখার জন্য ... আমার কেবল দরকার নেই। আমি সমস্ত ফাংশনগুলি সংজ্ঞায়িত করে দিয়ে শুরু করেছি *যাতে তারা কোনও কীতে আবদ্ধ না হলে আমি সহজেই তাদের সন্ধান করতে পারি। অন্যথায়, ইমাক্স নিজেই আমাকে বলবে যে ফাংশনটি কল করার কোনও দ্রুত উপায় ছিল কিনা। অন্য সব ব্যর্থ হলে, সবসময় আছে apropos
শান অলরেড

0

গ্যারেথ এবং জি-ম্যানের পোস্টগুলির সংমিশ্রণ:

find . -depth -type d -empty -execdir rmdir {} +

সম্পাদনা করুন: তবে এটি আমার পথ ভারতে 'সি' এর কারণে একটি সুরক্ষা ত্রুটি দিয়েছে ... সুতরাং পরিবর্তে:

$find . -depth -type d -empty | while read dir; do (rmdir -v $dir); done

আমি xargs ব্যবহার করি না কারণ এটিতে একটি ইনপুট লাইন সীমা রয়েছে (প্রায় 1024 লাইনের মধ্যে, আমার মনে হয়?), যদিও

 while read x; do (command $x); done

যতক্ষণ না ইনপুট থাকে ততক্ষণ চলতে থাকে। যদি আপনি ফলাফল দেখতে না চান এবং / অথবা এটি দ্রুত চালিত করতে চান তবে '-v' ভার্বোজের পতাকাটি ছেড়ে দিন।


0

হুমম ... সম্ভবত আরও সহজ সমাধান:

for /d /r %d in (*.*) do rd "%d"

আপনি যে ফোল্ডারটি খালি ফোল্ডারগুলি মুছতে চান তা থেকে এটি শুরু করুন।

/ d - ফোল্ডারগুলিতে কাজ করবে, ফাইল / র নয় - সাবডিয়ারদের পুনরুক্ত করবে

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