টার্মিনাল থেকে ফাইলের নামের উপর ভিত্তি করে নির্দিষ্ট ফাইল মোছা হচ্ছে


13

আমার কাছে একটি ডিরেক্টরি রয়েছে যাতে নাম রয়েছে

rho_0.txt
rho_5000.txt
rho_10000.txt
rho_150000.txt
rho_200000.txt

ইত্যাদি। আমি 5000 টির একাধিক এমন সমস্ত মুছতে চাই।

আমি নিম্নলিখিতগুলি চেষ্টা করেছিলাম: printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | rmতবে এটি আমাকে প্রতিক্রিয়া জানিয়েছিল rm: missing operand

এই কাজ করার জন্য অন্য উপায় আছে কি?


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

সুরক্ষা এখানে গুরুত্বপূর্ণ। আমি সাধারণত এই জিনিসগুলি lsপ্রথমে পরীক্ষা করি ।
স্কট

উত্তর:


49

আপনার কাছে যেখানে কোনও লুপ বা অতিরিক্ত কমান্ডের দরকার নেই Bash Shell Brace Expansion

rm -f rho_{0..200000..5000}.txt

ব্যাখ্যা : {start..end..step}-fঅবর্তমান ফাইল প্রম্পট উপেক্ষা করার।


PS সুরক্ষা রাখতে এবং কোন ফাইলগুলি মুছে ফেলা হবে তা পরীক্ষা করতে দয়া করে প্রথমে একটি পরীক্ষা করুন:

ls -1 rho_{0..200000..5000}.txt

13

rmস্ট্যান্ডার্ড ইনপুট থেকে পড়া হয় না। আপনি করতে পারেন:

for i in $(seq 5000 5000 25000); do
    rm -i rho_${i}.txt
done

অপসারণের আগে অনুরোধ করার -iবিকল্পটি আমি অন্তর্ভুক্ত করেছি rmযাতে আপনি আচরণটি যাচাই করতে পারেন। একবার আপনি আত্মবিশ্বাসের পরে আপনি যা চান তা করছেন, আপনি সেই বিকল্পটি বাদ দিতে পারেন।

সম্পাদনা করুন: বিকল্পভাবে, আপনি এটি করতে পারেন:

for ((i = 5000; i <= 25000; i += 5000)); do
    rm -i rho_${i}.txt
done

আপনি যদি কোনও প্রোগ্রামিং করেন তবে এই ফর্মটি আরও বেশি পরিচিত হতে পারে।


12

আপনি কোনও প্রোগ্রামে পাইপ করতে পারবেন না যেমন পাইপের সামগ্রীটি আর্গুমেন্ট। এটি স্টিডিনের মাধ্যমে পাঠানো হয়েছে।

এই উদ্দেশ্যে আপনার xarg ব্যবহার করা উচিত:

printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | xargs rm 

তবে প্রথমে আপনি প্রতিধ্বনি দিয়ে চেষ্টা করে দেখতে পারেন যে আপনার ইচ্ছা অনুযায়ী সবকিছু আছে:

printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | xargs echo

সংস্করণটি যদি seqগেছে -f/ --formatআপনি যে পরিবর্তে ব্যবহার বিকল্প পারেন এই কাজ-অ্যারাউন্ড সঙ্গে printfএবং কমান্ড প্রতিকল্পন।
ডেভিড ফোস্টার

ধন্যবাদ, আমি প্রশ্নটিতে ব্যবহৃত কমান্ডটি ব্যবহার করে তার আরএম ত্রুটিটি ব্যাখ্যা করার চেষ্টা করেছি
M4rty

9

কেউ ভুল হলে আমি আমাকে সংশোধন করি, তবে শুরু হওয়া সমস্ত ফাইল যদি rho_এই ফর্মের হয় তবে এটি করার মতো নয়

rm rho_0.txt rho_*[05]000.txt

যেহেতু একটি সংখ্যা (0 ব্যতীত) 5000 এর একাধিক হয় এবং কেবল যদি এটি 0000 বা 5000 এ শেষ হয়।

(0 এটি একটি বিশেষ কেস, যেহেতু এটি 5000 এর একাধিক, তবে সাধারণত অতিরিক্ত নেতৃস্থানীয় জিরো ছাড়াই লিখিত হয় 0 আপনি যদি 0 টি অন্তর্ভুক্ত করার ইচ্ছা না করেন, তবে উপরের লাইনের বাইরে নিয়ে যান))

অবশ্যই এটি তখনই ব্যবহার করা উচিত যদি rho_*.txtআপনার ডিরেক্টরিতে থাকা সমস্ত ফাইলের পছন্দসই ফর্ম থাকে। আপনার ডিরেক্টরিতে যদি এটি থাকে তবে এটি ব্যবহার করবেন না rho_please_dont_delete_me_5000.txt

(গণিত দ্রষ্টব্য: এটি অবিকলভাবে কাজ করে কারণ 5000 এবং সমস্ত মূল উপাদানগুলি যেমন 2 এবং 5, আমরা যে বেসটিতে কাজ করছি তারও প্রধান কারণ, 10 সমানভাবে, এখানে 10 এর যথেষ্ট পরিমাণ শক্তি রয়েছে (যা 10000) যা এটি 5000 দ্বারা বিভাজ্য। 3000 এর গুণক সমস্তগুলির সাথে মিলের জন্য অনুরূপ কৌশল নেই))


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