অগ্রগতি পাশাপাশি দেখার জন্য একটি ডিরেক্টরি থেকে কোটি কোটি ফাইল মুছে ফেলা হচ্ছে


36

আমার কাছে 30 টিবির একটি বিলিয়ন বিলিয়ন ফাইল রয়েছে যা আনুষ্ঠানিকভাবে সমস্ত JPEG ফাইল directory আমি ফাইলগুলির প্রতিটি ফোল্ডারটি মুছে ফেলছি:

sudo rm -rf bolands-mills-mhcptz

এই কমান্ডটি কেবল চলমান আছে এবং এটি কার্যকর কিনা তা কিছুই দেখায় না।

এটি ফাইলগুলি মুছে ফেলা বা কমান্ডের বর্তমান অবস্থা কী হিসাবে তা দেখতে চাই।


19
উত্তর নয়: কখনও কখনও আপনি যে জিনিস রাখতে চান তা ফর্ম্যাট করতে এবং আপনি যে জিনিসটি রাখতে চান তা পুনরুদ্ধার করা দ্রুত হয়। অন্যান্য উত্তর: unix.stackexchange.com/questions/37329/…
এরিক টাওয়ার

2
কোন নির্দিষ্ট ফাইলগুলি সরানো হয়েছে তা জানার পরিবর্তে আপনি যদি কেবল অগ্রগতির ধারণা চান তবে আপনি "df / dev / sd_w যাইহোক_তিনি_ড্রাইভ_স" চালাতে পারেন।
জামেস্কেফ

11
কিভাবে আপনি একক ডিরেক্টরিতে কোটি কোটি ফাইল শেষ করেছেন ??
মনিকার সাথে লাইটনেস রেস

1
@ মিশেলহ্যাম্পটন তবে ফাইলগুলি পৃথক ডেটাसेट না হলে এটি দীর্ঘ সময় নিতে পারে। ( জেডএফএসে
v7d8dpo4

5
বিলিয়ন ফাইল, হাহ? ব্যবহার করে দেখুন rm -ri। এটা মজা হবে!
OldBunny2800

উত্তর:


98

আপনি প্রতি ফাইল মুছে ফেলা মুদ্রণ করতে ব্যবহার rm -vকরতে পারেন rm। আপনি দেখতে পাচ্ছেন যে rmএটি ফাইল মুছে ফেলার জন্য কাজ করছে indeed তবে আপনার যদি কয়েক বিলিয়ন ফাইল থাকে তবে আপনি যা দেখবেন তা হ'ল এটি rmএখনও কাজ করছে। ইতিমধ্যে কতগুলি ফাইল মুছে ফেলা হয়েছে এবং কতটি অবশিষ্ট রয়েছে তা আপনার কোনও ধারণা নেই।

সরঞ্জামটি pvআপনাকে অগ্রগতি অনুমানের সাথে সহায়তা করতে পারে।

http://www.ivarch.com/programs/pv.shtml

উদাহরণস্বরূপ আউটপুট rmসহ আপনি কীভাবে অনুরোধ করবেন তা এখানেpv

$ rm -rv dirname | pv -l -s 1000 > logfile
562  0:00:07 [79,8 /s] [====================>                 ] 56% ETA 0:00:05

এই কনট্রিভড উদাহরণে আমি বলেছি pvযে 1000ফাইলগুলি রয়েছে। ফলাফলটি pvদেখায় যে 562 ইতিমধ্যে মুছে ফেলা হয়েছে, অতিবাহিত সময়টি 7 সেকেন্ড এবং সম্পূর্ণ করার জন্য অনুমান 5 সেকেন্ডে।

কিছু ব্যাখ্যা:

  • pv -lতোলে pvবাইট পরিবর্তে নতুন লাইন দিয়ে গণনা
  • pv -s numberমোটটি pvকী তা তা আপনাকে জানায় যাতে এটি অনুমান করতে পারে।
  • logfileশেষে পুনঃনির্দেশ পরিষ্কার আউটপুট জন্য। অন্যথায় স্ট্যাটাস লাইনটি pvআউটপুটটির সাথে মিশে যায় rm -v। বোনাস: আপনার মুছে ফেলা হয়েছে তার একটি লগফিল থাকবে। তবে সাবধান থাকুন ফাইলটি বিশাল আকার ধারণ করবে। আপনার /dev/nullকোনও লগের দরকার না হলে আপনি পুনর্নির্দেশ করতে পারেন।

ফাইলের সংখ্যা পেতে আপনি এই আদেশটি ব্যবহার করতে পারেন:

$ find dirname | wc -l

কোটি কোটি ফাইল থাকলে এটিও দীর্ঘ সময় নিতে পারে। pvএটি কত গুনেছে তা দেখতে আপনি এখানেও ব্যবহার করতে পারেন

$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [     <=>                                              ]
278044

এখানে এটি বলে যে 278k ফাইলগুলি গণনা করতে 4 সেকেন্ড সময় নিয়েছে শেষে ( 278044) এর সঠিক গণনাটি আউটপুট wc -l

আপনি যদি গণনার জন্য অপেক্ষা করতে না চান তবে আপনি ফাইলের সংখ্যা অনুমান করতে পারেন বা অনুমান pvছাড়াই ব্যবহার করতে পারেন :

$ rm -rv dirname | pv -l > logfile

এটির মতো আপনার শেষ করার কোনও অনুমান নেই তবে কমপক্ষে আপনি দেখতে পাবেন যে ইতিমধ্যে কতগুলি ফাইল মোছা হয়েছে। আপনার /dev/nullযদি লগফিলের প্রয়োজন না হয় তবে পুনর্নির্দেশ করুন ।


Nitpick:

  • আপনার কি সত্যিই দরকার sudo?
  • সাধারণত rm -rপুনরাবৃত্তি মোছার জন্য যথেষ্ট। কোন প্রয়োজন নেই rm -f

5
এর দুর্দান্ত ব্যবহার pv, ধরে নিচ্ছি যে কোটি কোটি ফাইল গণনা এটি খুব ব্যয়বহুল নয় ;-)। (এটি rmপরিমাপ করার মতো প্রায় সময় নিতে পারে !)
স্টিফেন কিট

7
এটা: @StephenKitt এই সত্যিই আমাকে (এবং অনেক অন্যান্য মানুষ) উইন্ডোজ ফাইল ইউটিলিটি সম্পর্কে প্রস্তাবে রেগে হয় সবসময় , ব্যর্থ ছাড়া, সংখ্যা এবং মুছে ফেলার আগে ফাইল মাপ যা, যদি না-ড্রাইভে বড়, মোট ছাত্র অনেক প্রসেসর তুলনায় ধীর, প্রায় হিসাবে লাগে যতক্ষণ আসল মুছে ফেলা!
wizzwizz4

@ wizzwizz4 সত্যিই! আইআইআরসি যদিও এর থেকেও অনেক বেশি রয়েছে - এটি পরীক্ষা করে যে এটি কিছু মুছে ফেলার আগে সবকিছু মুছতে পারে , মুছে ফেলার সম্ভাবনা বাড়াতে "সমস্ত বা কিছুই নয়" nothing বহু বছর আগে আমি উইন্ডোজের জন্য একটি ফাইল সিস্টেম ড্রাইভার লিখেছিলাম, এক্সপ্লোরার মুছে ফেলার ক্ষেত্রে যেভাবে গিয়েছিল তার সাথে সম্পর্কিত আমাদের বেশ কয়েকটি অদ্ভুততা ছিল, তবে আমি বিশদটি মনে করতে পারি না। (আমি মনে করি যে একটি ফোল্ডার তৈরি করা নতুন ফোল্ডারে কোনও ফাইল লিখতে এবং মুছতে জড়িত!)
স্টিফেন কিট

7
পছন্দ করেছেন আমি বিশ্বাস করি pvঅগ্রগতি বারটি প্রতি সেকেন্ডে একবার হলেও তা সতেজ করে। সুতরাং, টার্মিনালটিতে প্রতি সেকেন্ডে একটি টনের পরিবর্তে কেবল একটি লাইন প্রদর্শন করা দরকার। pvপ্রতিটি নিউলাইন যার মুখোমুখি হয় কেবল তারই জন্য কাউন্টার বাড়ানো প্রয়োজন; এটি লাইন মোড়কের চেয়ে দ্রুত হতে পারে এবং টার্মিনালে একটি লাইন প্রদর্শন করার জন্য কী নয়। আমি মনে করি এটির সাথে চালানো pvফাইল সরানো সরলর চেয়ে দ্রুততর হয় rm -rv
জোল

1
@ স্কাইওয়িন্দারrm -rv dirname | pv -l -s $(find dirname | wc -l) > logfile
লেসমান

28

পরীক্ষা করে দেখুন lesmana এর উত্তর , এটা অনেক আমার চেয়ে ভালো - বিশেষ করে গত pvউদাহরণস্বরূপ, যা অনেক লম্বা মূল নীরব চেয়ে নেবে না rmযদি আপনি উল্লেখ /dev/nullপরিবর্তে logfile

আপনার rmবিকল্পটি সমর্থন করে ধরে নিচ্ছেন (এটি সম্ভবত আপনি লিনাক্স চালাচ্ছেন তাই এটি করে), আপনি এটিকে ভার্বোজ মোডে চালাতে পারেন -v:

sudo rm -rfv bolands-mills-mhcptz

যেমন বেশ কয়েকটি কমেন্টার দ্বারা চিহ্নিত করা হয়েছে, টার্মিনাল দ্বারা আউটপুট পরিমাণ উত্পন্ন এবং প্রদর্শিত হওয়ার কারণে এটি খুব ধীর হতে পারে। আপনি পরিবর্তে কোনও ফাইলে আউটপুট পুনর্নির্দেশ করতে পারেন:

sudo rm -rfv bolands-mills-mhcptz > rm-trace.txt

এবং আকার দেখুন rm-trace.txt


5
এটি আউটপুটটি উত্পন্ন এবং টার্মিনালে রেন্ডার করার কারণে এটি মুছতে আস্তে আস্তে করতে পারে :)
রেক্যান্ডবোনম্যান

2
অবশ্যই এটি ধীর হবে। কোনও ফাইলকে কয়েক বিলিয়ন লাইন লিখতে শূন্য সময়ে ঘটে না।
ব্যবহারকারী 207421

23

আরেকটি বিকল্প হ'ল ফাইল সিস্টেমে ফাইল সংখ্যা হ্রাস করা। অন্য টার্মিনালে, চালান:

watch  df -ih   pathname

ব্যবহৃত-ইনডগুলি গণনা যেমন কমেছে তত rmউন্নতি করবে। (যদি না ফাইলে বেশিরভাগ লিঙ্ক থাকে তবে যেমন গাছটি তৈরি করা হয়েছিল cp -al)। এই ফাইলগুলির সংখ্যা (এবং ডিরেক্টরি) পদে মোছার অগ্রগতি ট্র্যাক করে। ব্যবহৃত স্থান শর্তাবলী ট্র্যাক করবে dfছাড়া -i

আপনি iostat -x 4প্রতি সেকেন্ডে আই / ও ক্রিয়াকলাপগুলি দেখতে দৌড়াতে পারেন (পাশাপাশি কিবি / গুলি, তবে এটি খাঁটি মেটাডেটা আই / ও-তে খুব প্রাসঙ্গিক নয়)।


rmবর্তমানে কোন ফাইলগুলি কীভাবে কাজ করছে সে সম্পর্কে আপনি যদি কৌতূহল পান তবে আপনি straceএটির সাথে একটি সংযুক্ত করতে পারেন এবং unlink()আপনার টার্মিনালটিতে (এবং getdents) সিস্টেম কল হিসাবে কল দেখতে পারেন । যেমন sudo strace -p $(pidof rm)। আপনি ^cস্ট্রেসটি rmকোনও বাধা ছাড়াই আলাদা করতে পারেন ।

আমি ভুলে গিয়েছি যদি rm -rগাছটি ডিরেক্টরি মুছে ফেলা হয় তবে তা পরিবর্তন করে; যদি তাই আপনি তাকান পারে /proc/<PID>/cwd। এর /proc/<PID>/fdপ্রায়শই একটি ডিরেক্টরি এফডি খোলা থাকতে পারে, যাতে আপনার rmপ্রক্রিয়াটি বর্তমানে কী দেখছে তা দেখতে আপনি এটি দেখতে পারেন ।


2
df -ihrmঅগ্রগতি দেখার সত্যিই একটি দুর্দান্ত সস্তা উপায় ।
স্টিফেন কিট

বিটিডাব্লু, এটি বিটিআরএফএসে কাজ করে না, যেখানে ব্যবহৃত-ইনড গণনা সর্বদা শূন্য থাকে। :( FAT32 এর ক্ষেত্রেও একই, তবে আপনার /bootEFI সিস্টেম পার্টিশনে আপনার সম্ভবত বিলিয়ন ফাইল নেই
পিটার কর্ডস

4

উপরের উত্তরগুলি সমস্ত ব্যবহার করার সময় rm, rmপ্রকৃতপক্ষে একটি বিশাল সংখ্যক ফাইল মুছে ফেলাতে বেশ ধীর হতে পারে, যেমন আমি সম্প্রতি পর্যবেক্ষণ করেছি যে .tar আর্কাইভ থেকে K 100K ফাইলগুলি বের করার সময় সেগুলি মুছে ফেলার চেয়ে কম সময় নেয়। যদিও এটি আপনার জিজ্ঞাসা করা প্রশ্নের উত্তর দেয় না, তবে আপনার সমস্যার আরও ভাল সমাধান হতে পারে আপনার ফাইলগুলি মুছতে আলাদা পদ্ধতি ব্যবহার করা, যেমন এই প্রশ্নের উত্সাহীন উত্তরগুলির মধ্যে একটি ।

আমার ব্যক্তিগত প্রিয় পদ্ধতিটি ব্যবহার করা rsync -a --delete। আমি দেখতে পেয়েছি যে এই পদ্ধতিটি যথেষ্ট দ্রুত সম্পাদন করে যে এই প্রশ্নের সর্বাধিক উত্সাহিত উত্তরের চেয়ে সহজেই ব্যবহারের পক্ষে মূল্যবান , যেখানে লেখক একটি সি প্রোগ্রাম লিখেছেন যা আপনাকে সংকলন করতে হবে। (দ্রষ্টব্য যে এটি প্রতিটি ফাইলকে স্টডআউটে প্রসেস করা হচ্ছে আউটপুট দেবে, অনেকটা rm -rv; এটি আশ্চর্যজনক পরিমাণে প্রক্রিয়াটি ধীর করতে পারে you আপনি যদি এই আউটপুটটি না চান, rsync -aq --deleteতবে পরিবর্তে কোনও ফাইলে আউটপুটটি ব্যবহার করুন বা পুনর্নির্দেশ করুন))

উত্তরটির লেখক বলেছেন:

প্রোগ্রামটি এখন (আমার সিস্টেমে) 4300 সেকেন্ডের মধ্যে 1000000 ফাইল মুছে ফেলবে। এর নিকটতম প্রোগ্রামটি ছিল rsync -a --delete যা seconds০ সেকেন্ড সময় নিয়েছিল (এটি মুছে ফেলাও অর্ডারে অর্ডার করে, তবে একটি কার্যকর ডিরেক্টরি অনুসন্ধানও করে না)।

আমি খুঁজে পেয়েছি যে এটি আমার উদ্দেশ্যগুলির জন্য যথেষ্ট ভাল। উত্তরটি থেকে সম্ভবত সম্ভাব্য গুরুত্বপূর্ণ, কমপক্ষে যদি আপনি ext4 ব্যবহার করছেন:

পূর্বাভাস হিসাবে, একজনকে প্রভাবিত ডিরেক্টরিটি সরিয়ে ফেলা উচিত এবং এর পরে এটি পুনরায় তৈরি করা উচিত। ডিরেক্টরিগুলি কেবল আকারে বৃদ্ধি পায় এবং ডিরেক্টরি আকারের কারণে কিছু ফাইল ভিতরে থাকা সত্ত্বেও দুর্বল সম্পাদন করতে পারে।


হু, আমি আশা করতাম rmএবং / অথবা find --deleteদক্ষ হয়ে উঠতাম। মোছার সময় বি-ট্রি পুনরায় ভারসাম্য এড়ানোর জন্য সাজানোর ক্রম মোছার বিষয়ে আকর্ষণীয় বিষয়। এটি কতটা অন্যান্য ফাইল সিস্টেমে প্রযোজ্য তা নিশ্চিত নয়। এক্সএফএস এছাড়াও ডিরেক্টরি প্রতি মিলিয়ন ফাইল সহ দুর্দান্ত নয়। বিটিআরএফএস সম্পর্কে আইডিকে, তবে আমি এই ধারণাটির আওতায় আছি যে এটি এই ধরণের জিনিসটির জন্য ভাল হতে পারে।
পিটার কর্ডেস

সেই দ্বিতীয় উক্তিটি ফাইল সিস্টেমের ধরণের উপর নির্ভর করে না ...
মেনাশেহ

@ মেনাশেহ ভাল কথা, আমি আমার উত্তরে এটি সম্পাদনা করেছি।
হাইটেক কম্পিউটার কম্পিউটার

3

আপনি যা করতে পারেন তা rmহ'ল ব্যাকগ্রাউন্ডে প্রক্রিয়া শুরু করা (কোনও আউটপুট না দিয়ে, সুতরাং এটি ধীর করা হবে না) এবং তারপরে, অগ্রভাগে এটি একটি সাধারণ (ক) কমান্ড দিয়ে পর্যবেক্ষণ করুন :

pax> ( D=/path/to/dir ; rm -rf $D & while true ; do
...>   if [[ -d $D ]] ; then
...>     echo "$(find $D | wc -l) items left"
...>   else
...>     echo "No items left"
...>     break
...>   fi
...>   sleep 5
...> done )

27912 items left
224 items left
No items left

pax> _

find/wcকম্বো কোনো ইউনিট যদি আপনি চান দিতে পারবেন টুল দিয়ে প্রতিস্থাপিত করা যেতে পারে।


(ক) ভাল, পারমাণবিক পদার্থবিজ্ঞান, রিমান অনুমান, বা ক্রিসমাসের জন্য আমার স্ত্রীকে কী কিনে আনতে হবে তুলনায় তুলনামূলক সহজ-


0

কিছুক্ষণ আগে আমি রেটগুলি মুদ্রণের জন্য মুদ্রণের জন্য কিছু লিখেছিলাম। আপনি চালাতে পারেন rm -rfv | ./counterএবং এটি প্রতি সেকেন্ডে / মিনিটে লাইনগুলি মুদ্রণ করবে। যদিও সরাসরি অগ্রগতি নয়, এটি আপনাকে অগ্রগতির হার সম্পর্কে কিছু প্রতিক্রিয়া জানাবে, সম্ভবত rmকোনও নেটওয়ার্ক ফাইল সিস্টেমে বিভ্রান্ত হয়েছে বা সম্ভবত এর অনুরূপ?

কোডটির লিঙ্কটি এখানে:

http://www.usenix.org.uk/code/counter-0.01.tar.gz

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