কমান্ড লাইন থেকে আমি কীভাবে একটি ডিরেক্টরিতে সমস্ত খালি ডিরেক্টরি মুছব?


58

বলুন আমার নামের একটি ডিরেক্টরি আছে foo/। এই ফোল্ডারে সাব-ডিরেক্টরি অন্তর্ভুক্ত রয়েছে। আমি কীভাবে একটি কমান্ডের সমস্ত খালি ডিরেক্টরি মুছতে পারি?

উত্তর:


119

এই আদেশটি ব্যবহার করে দেখুন:

find . -empty -type d -delete

findকমান্ডের জন্য ফাইল / নিদিষ্ট পথ থেকে একটি নির্দিষ্ট অনুসন্ধানের মিলে ডিরেক্টরি অনুসন্ধান করতে এই ক্ষেত্রে বর্তমান ডিরেক্টরী (অত: পর ব্যবহার করা হয় .)।

-emptyবিকল্প কোনো ফাইল ও ডিরেক্টরি খালি জন্য কথা সত্য।

-type dবিকল্পের জন্য সত্য ফাইল নিদিষ্ট টাইপ; এই ক্ষেত্রে dফাইল টাইপ ডিরেক্টরি বোঝায় ।

-deleteবিকল্প সম্পাদন করতে কর্ম, এবং অনুসন্ধান পাওয়া সব ফাইল জন্য কথা সত্য।


আমি মনে করি এটি এটি করার সহজতম উপায় তাই আমি এগিয়ে যাব এবং উত্তর হিসাবে এটি চিহ্নিত করব।
justningrif

আরে বিল, আমি অন্য একটি অনুরূপ প্রশ্ন পোস্ট করার চেষ্টা করেছি এবং এটি আমাকে ছাড়তে দেবে না কারণ এটি বলেছিল এটি একটি দ্বৈত, তাই আমি আশা করি আপনি এখানে আমাকে উত্তর দিতে সক্ষম হবেন। বলুন যে আমি উপরের মতো একই জিনিসটি করতে চেয়েছিলাম তবে সমস্ত ডিরেক্টরি সেগুলি খালি কিনা তা সরিয়ে ফেলুন।
justingrif

3
আপনি ডিরেক্টরি মুছে ফেলুন হবে, হোক বা না হোক তারা খালি রয়েছে নির্বিশেষে নিম্নোক্ত কমান্ড: rm -rf <directory-name>। এটি ফাইল এবং উপ-ডিরেক্টরি সহ এর সমস্ত বিষয়বস্তু সহ ডিরেক্টরিটি সরিয়ে ফেলবে। -rবিকল্প যাও recursively মুছে দিন, যখন মানে -fকমান্ড মানে মুছে ফেলার আগে প্রম্পট হয় না। আপনি যদি কোনও ডিরেক্টরি / ফাইল মোছার আগে অনুরোধ করতে চান তবে -fবিকল্পটির সাথে বিকল্পটি প্রতিস্থাপন করুন -i
বিল

যদি বলি ডিরেক্টরিতে কিছু ফাইল থাকত আমি কী রাখতে চাই। সুতরাং, আমি / ডিরেক্টরি / ডিরেক্টরি / ডিরেক্টরিতে সমস্ত ডিরেক্টরি মুছে ফেলতে চেয়েছিলাম তবে যে কোনও ফাইল সেখানে থাকতে পারে।
জাস্টিংফ্রি

2
এটা তোলে ভোজন একটি নল ব্যবহার করে এই কাজ করা সম্ভব stdoutমাত্র একটি কমান্ড (যেমন এর findমধ্যে) stdinঅন্যান্য (যেমন এর rm), কিন্তু, খুব সতর্কতা অবলম্বন করা আবশ্যক কারণ এটি / ডিরেক্টরি আপনি চাই না অপনোদন বা ফাইল মুছে ফেলতে পারবেন মুছে ফেলা! এটি কীভাবে করবেন সে সম্পর্কে আরও তথ্যের manজন্য, এই আদেশগুলির প্রত্যেকটির জন্য পৃষ্ঠাগুলি দেখুন । নিরাপদ থাকতে, আসল জিনিসটি চেষ্টা করার আগে সর্বদা অস্থায়ী ডিরেক্টরিতে এই জাতীয় জিনিসগুলি পরীক্ষা করুন।
বিল

11

আপনি rmdirখালি নয় এমন ডিরেক্টরি মুছতে কমান্ডের অস্বীকৃতি এবং find -depthডিরেক্টরি ট্রি গাছের নীচের অংশটি অতিক্রম করার বিকল্পটি গ্রহণ করতে পারেন:

find . -depth -exec rmdir {} \;  

(এবং ত্রুটিগুলি উপেক্ষা করুন), বা 2>/dev/nullএগুলি সত্যিই উপেক্ষা করার জন্য যুক্ত করুন।

-depthবিকল্প findডিরেক্টরির গাছের নীচে খোঁজার শুরু হয়।

rm -rfডিরেক্টরিতে থাকা সমস্ত ফাইল (এবং এর উপ-ডিরেক্টরিগুলি এবং ....) এবং সমস্ত ডিরেক্টরি এবং সমস্ত কিছু মুছবে ।


8
rmdir *

সমস্ত খালি ডিরেক্টরি মুছে ফেলা হবে। আপনার ত্রুটিটি আপনার টার্মিনাল বিশৃঙ্খলা থেকে আটকাতে ব্যবহার করার জন্য, প্রতিটি খালি খালি ডিরেক্টরি এবং ফাইলের জন্য এটি একটি ত্রুটি ছুঁড়ে ফেলবে

rmdir * 2> /dev/null

এটি স্ক্রিপ্টিংয়ের জন্য উপযুক্ত নয় কারণ এটি একটি শূন্য-স্থিতি কোডের সাহায্যে প্রস্থান করবে তবে এটি কাজ করে।
the_drow

@ এটি_ড্রো কীভাবে এটি অনুপযুক্ত করে তোলে? উপায় দ্বারা আপনি ব্যবহার করতে পারেন rmdir * 2>/dev/null || true। (
সন্ধানের

আমি প্রায়শই এটি করি $HOME। একটি দুষ্ট হাসি সঙ্গে।
অ্যালোস মাহডাল

কারণ কিছু ডিরেক্টরি খালি না হলে এটি ব্যর্থতার কথা জানায়।
the_ড্রো

এটি কি অনুসন্ধান পদ্ধতির চেয়ে দ্রুত? কেউ কি দুজনের তুলনা করেছেন?
জেরাস

1
find . -type d -empty -delete -maxdepth 1

আপনি শুধুমাত্র প্রত্যক্ষ সাবডিরেক্টরি মুছে ফেলতে চান তাদের জন্য foo/


0

পাইথন পদ্ধতির

$ tree                                                                                                                                                                                  
.
├── empty_dir1
├── empty_dir2
├── subdir1
│   ├── file1.abc
│   └── file2.abc
└── subdir2
    ├── file1.abc
    └── file2.abc

4 directories, 4 files
$ python -c 'import os;empty=[r for r,s,f in os.walk(".") if not f and not s and r != "." ];map(lambda x: os.rmdir(x),empty)'
$ tree
.
├── subdir1
│   ├── file1.abc
│   └── file2.abc
└── subdir2
    ├── file1.abc
    └── file2.abc

এটি এর মতো কাজ করে:

  • আমরা os.walk()ক্রমাগত ডিরেক্টরি ট্রি চলতে ফাংশন ব্যবহার করি । প্রতিটি পুনরাবৃত্তির rবর্তমান ফোল্ডারে সেট করা থাকে যা আমরা অ্যাক্সেস করছি, এর sমধ্যে ডিরেক্টরিগুলির তালিকা রয়েছে rএবং fএতে ফোল্ডারের ফাইলগুলির তালিকা থাকবে। অবশ্যই যদি fএবং sখালি থাকে তবে আমরা জানি যে rএটি খালি।
  • প্রথম তালিকা-উপলব্ধি আমাদের তৈরি করতে দেয় empty, উপরে উল্লিখিত মূল্যায়নের উপর ভিত্তি করে খালি থাকা সমস্ত ডিরেক্টরিগুলির তালিকা।
  • দ্বিতীয় ফাংশন, তালিকার প্রতিটি আইটেম map()সম্পাদন করতে ব্যবহৃত হয় । তালিকা বোধগম্য পাশাপাশি বিকল্প ব্যবহার করা যেতে পারে।os.rmdir()empty

স্ক্রিপ্ট হিসাবে এটি যেমন হবে:

#!/usr/bin/env python
import os
empty=[]
for r,s,f in os.walk("."):
    if not f and not s and r != ".":
        empty.append(r)

for i in empty:
    os.rmdir(i)

সহজ প্রশ্নের জন্য খুব জটিল :(
নুরুলহুদামস্তাকিম

টুইটসমূহ দেখুন পাইথনের অভ্যস্ত প্রচুর লিনাক্স ব্যবহারকারীদের জন্য এটি আসলে খুব বিনয়ী :) এবং এর বিভিন্নতা ছাড়াও। আধুনিক সিস্টেম প্রশাসন /bin/shকেবল বাশ বা কেবলমাত্র সীমাবদ্ধ নয় এবং পাইথন আসলে এই দু'জনের চেয়ে আরও মার্জিত ভাষা
সের্গেই কোলোডিআজনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.