আমি একটি স্ক্রিপ্ট লিখেছি যা একটি ফোল্ডারে শেষ দুটি ফাইল বাদে সমস্ত মুছে ফেলে:
#!/bin/bash
ls -1 --quoting-style=shell-always /path/to/some/folder \
| head -n -2 \
| xargs printf -- "'/path/to/some/folder/%s'\n" \
| xargs sudo rm -rf
এই স্ক্রিপ্টটি প্রতিদিন ক্রোন জব হিসাবে কার্যকর করা হবে।
যুক্তিটি নিম্নরূপ:
ব্যবহার করে সমস্ত ফাইলের একটি তালিকা পান
ls -1
(যাতে আমি প্রতি লাইনে একটি ফাইল পাই);ব্যবহার করে তালিকা থেকে শেষ দুটি সরান
head -n -2
;যেহেতু
ls
আপেক্ষিক পাথগুলি মুদ্রণ করে,xargs printf
ফোল্ডারটির পথটি প্রিপেন্ড করতে এটিকে জিনিসটি ব্যবহার করুন এবং এটিকে একটি পরম পথ তৈরি করুন;তাদের
sudo rm -rf
ব্যবহার করতে প্রেরণ করুনxargs
।
এই ফোল্ডারে প্রত্যেকের অ্যাক্সেস রয়েছে, সুতরাং যে কেউ এই ফোল্ডারে যে কোনও ফাইল তৈরি করতে এবং মুছতে পারে।
সমস্যাটি হ'ল: sudo rm -rf
ভয়ঙ্কর। xargs sudo rm -rf
অবিশ্বাস্যরকম ভীতিকর।
আমি নিশ্চিত হতে চাই যে মুছে ফেলার জন্য চালিত ফাইল তৈরি করে (অন্য কোনও দুর্ঘটনাক্রমে বা উদ্দেশ্যমূলকভাবে) কেউ অন্য ফোল্ডার / সিস্টেমগুলিকে ক্ষতি করতে পারে না। আমি জানি না, কিছু চালাকের মতো:
file with / spaces.txt
যার ফলশ্রুতিতে একটি অতি ভয়ঙ্কর হতে পারে sudo rm -rf /
।
সম্পাদনা: আমার ভুল, ফাইলের নামগুলি ধারণ করতে পারে না /
, সুতরাং এই নির্দিষ্ট সমস্যাটি ঘটবে না, তবে অন্যান্য ঝুঁকি রয়েছে কিনা তা নিয়ে প্রশ্ন এখনও দাঁড়িয়ে আছে।
এই কারণেই আমি ব্যবহার করছি --quoting-style=shell-always
, এটি ফাঁকা ফাইল সহ কোনও কৌশল রোধ করা উচিত। তবে এখন আমি ভাবছি কেউ হয়তো ফাইলনেমে ফাঁকা স্থান এবং উদ্ধৃতিগুলির সাথে অতিরিক্ত চালাক হতে পারে ।
আমার লিপিটি কি নিরাপদ?
দ্রষ্টব্য: আমার প্রয়োজন sudo
কারণ আমি ফোল্ডারটি দূর থেকে অ্যাক্সেস করছি (ম্যাপযুক্ত নেটওয়ার্ক ড্রাইভ ব্যবহার করে mount
) এবং আমি এটি sudo ছাড়া কাজ করতে পারি না।
/
নামের চরিত্রটির সাথে একটি ফাইল তৈরি করা যেতে পারে আমি এটি এখানে ফিরে পাওয়ার চেষ্টা করছি
ls
আউটপুট পার্সিং করার কারণে এটি ইতিমধ্যে একটি খারাপ লিখিত কমান্ড, এমনকি উদ্ধৃতি সহ। ls
অর্ডার বাছাইয়ের জন্য লোকেলও ব্যবহার করে, আমি মনে করি, সুতরাং head
শেষ 2 অপসারণের উদ্দেশ্য কী তা আমি দেখতে পাচ্ছি না (যদি আপনি পরিত্রাণের চেষ্টা করছেন না .
এবং ..
কোন আইর্কে rm
কোনওভাবেই যুক্তি হিসাবে মঞ্জুরি দেওয়া হচ্ছে না Just কেবল ব্যবহার করুন find /path/to/folder -type f delete
And না sudo
আপনি যদি ক্রোন থেকে দৌড়ে যান - ক্রোন ইতিমধ্যে মূল স্তরে রয়েছে
printf -- '%s\0' /path/to/some/folder/* | head -zn -2 | xargs -0 rm
?