বলুন আমার নামের একটি ডিরেক্টরি আছে foo/
। এই ফোল্ডারে সাব-ডিরেক্টরি অন্তর্ভুক্ত রয়েছে। আমি কীভাবে একটি কমান্ডের সমস্ত খালি ডিরেক্টরি মুছতে পারি?
বলুন আমার নামের একটি ডিরেক্টরি আছে foo/
। এই ফোল্ডারে সাব-ডিরেক্টরি অন্তর্ভুক্ত রয়েছে। আমি কীভাবে একটি কমান্ডের সমস্ত খালি ডিরেক্টরি মুছতে পারি?
উত্তর:
এই আদেশটি ব্যবহার করে দেখুন:
find . -empty -type d -delete
find
কমান্ডের জন্য ফাইল / নিদিষ্ট পথ থেকে একটি নির্দিষ্ট অনুসন্ধানের মিলে ডিরেক্টরি অনুসন্ধান করতে এই ক্ষেত্রে বর্তমান ডিরেক্টরী (অত: পর ব্যবহার করা হয় .
)।
-empty
বিকল্প কোনো ফাইল ও ডিরেক্টরি খালি জন্য কথা সত্য।
-type d
বিকল্পের জন্য সত্য ফাইল নিদিষ্ট টাইপ; এই ক্ষেত্রে d
ফাইল টাইপ ডিরেক্টরি বোঝায় ।
-delete
বিকল্প সম্পাদন করতে কর্ম, এবং অনুসন্ধান পাওয়া সব ফাইল জন্য কথা সত্য।
rm -rf <directory-name>
। এটি ফাইল এবং উপ-ডিরেক্টরি সহ এর সমস্ত বিষয়বস্তু সহ ডিরেক্টরিটি সরিয়ে ফেলবে। -r
বিকল্প যাও recursively মুছে দিন, যখন মানে -f
কমান্ড মানে মুছে ফেলার আগে প্রম্পট হয় না। আপনি যদি কোনও ডিরেক্টরি / ফাইল মোছার আগে অনুরোধ করতে চান তবে -f
বিকল্পটির সাথে বিকল্পটি প্রতিস্থাপন করুন -i
।
stdout
মাত্র একটি কমান্ড (যেমন এর find
মধ্যে) stdin
অন্যান্য (যেমন এর rm
), কিন্তু, খুব সতর্কতা অবলম্বন করা আবশ্যক কারণ এটি / ডিরেক্টরি আপনি চাই না অপনোদন বা ফাইল মুছে ফেলতে পারবেন মুছে ফেলা! এটি কীভাবে করবেন সে সম্পর্কে আরও তথ্যের man
জন্য, এই আদেশগুলির প্রত্যেকটির জন্য পৃষ্ঠাগুলি দেখুন । নিরাপদ থাকতে, আসল জিনিসটি চেষ্টা করার আগে সর্বদা অস্থায়ী ডিরেক্টরিতে এই জাতীয় জিনিসগুলি পরীক্ষা করুন।
আপনি rmdir
খালি নয় এমন ডিরেক্টরি মুছতে কমান্ডের অস্বীকৃতি এবং find -depth
ডিরেক্টরি ট্রি গাছের নীচের অংশটি অতিক্রম করার বিকল্পটি গ্রহণ করতে পারেন:
find . -depth -exec rmdir {} \;
(এবং ত্রুটিগুলি উপেক্ষা করুন), বা 2>/dev/null
এগুলি সত্যিই উপেক্ষা করার জন্য যুক্ত করুন।
-depth
বিকল্প find
ডিরেক্টরির গাছের নীচে খোঁজার শুরু হয়।
rm -rf
ডিরেক্টরিতে থাকা সমস্ত ফাইল (এবং এর উপ-ডিরেক্টরিগুলি এবং ....) এবং সমস্ত ডিরেক্টরি এবং সমস্ত কিছু মুছবে ।
rmdir *
সমস্ত খালি ডিরেক্টরি মুছে ফেলা হবে। আপনার ত্রুটিটি আপনার টার্মিনাল বিশৃঙ্খলা থেকে আটকাতে ব্যবহার করার জন্য, প্রতিটি খালি খালি ডিরেক্টরি এবং ফাইলের জন্য এটি একটি ত্রুটি ছুঁড়ে ফেলবে
rmdir * 2> /dev/null
rmdir * 2>/dev/null || true
। (
$HOME
। একটি দুষ্ট হাসি সঙ্গে।
find . -type d -empty -delete -maxdepth 1
আপনি শুধুমাত্র প্রত্যক্ষ সাবডিরেক্টরি মুছে ফেলতে চান তাদের জন্য foo/
।
$ 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
কেবল বাশ বা কেবলমাত্র সীমাবদ্ধ নয় এবং পাইথন আসলে এই দু'জনের চেয়ে আরও মার্জিত ভাষা