আমার একটি ফোল্ডার রয়েছে যার অনেকগুলি ফাইল রয়েছে এবং "rm -rf" সম্পূর্ণ হতে অনেক সময় লাগে। কোনও ডিরেক্টরি এবং এটির বিষয়বস্তু (সাবডিয়ারস, ইত্যাদি) অপসারণের জন্য কি কোনও দ্রুত উপায় আছে?
আমার একটি ফোল্ডার রয়েছে যার অনেকগুলি ফাইল রয়েছে এবং "rm -rf" সম্পূর্ণ হতে অনেক সময় লাগে। কোনও ডিরেক্টরি এবং এটির বিষয়বস্তু (সাবডিয়ারস, ইত্যাদি) অপসারণের জন্য কি কোনও দ্রুত উপায় আছে?
উত্তর:
আপনি ডিরেক্টরিটির জন্য ইনোডকে সংযুক্ত করার চেষ্টা করতে পারেন তবে এটি আপনাকে এতিম ফাইলগুলির পুরো লোড দিয়ে ফেলে দেয় যা সম্পর্কে ফ্লিপ fsck
হবে ।
rm
এটি পায় হিসাবে ভাল।
কিছু লোক প্রান্তের ক্ষেত্রে উল্লেখ করছেন যেখানে কিছু জিনিস অন্যদের চেয়ে দ্রুত হয়। তবে আসুন আমরা নিশ্চিত করি যে আমরা একই জিনিসগুলির সেরা সংস্করণগুলি তুলনা করছি।
আপনি যদি কোনও ডিরেক্টরি এবং এতে থাকা সমস্ত কিছু মুছতে চান তবে আমি আপনাকে পরামর্শ দিচ্ছি:
rm -rf path/to/directory
rm
অভ্যন্তরীণভাবে এটি মুছে ফেলতে চলেছে এমন ফাইল এবং ডিরেক্টরিগুলি তালিকাভুক্ত করবে । এবং এটি সমস্ত সংকলিত সি । এটি দুটি দ্রুত কারণ এটি।
এটি খুব সুস্পষ্টভাবে একই জিনিস নয় rm -rf path/to/directory/*
যা শেল স্তরে প্রসারিত হবে এবং যুক্তিগুলির একটি বোঝাটি পাস করবে rm
। তারপরে rm
সেগুলি বিশ্লেষণ করতে হবে এবং তারপরে প্রত্যেকের কাছ থেকে পুনরাবৃত্তি করতে হবে। এটা অনেক ধীর।
ঠিক যেমন একটি "বেঞ্চমার্ক" তুলনা find path/to/directory -exec {} \;
করা বাজে কথা। এটি rm
প্রতি ফাইলের মধ্যে একবার এটি চালায় । খুবই ধীর. এক্সার্গস-স্টাইলটি কমান্ড আর্গুমেন্টগুলির সাথে বিল্ড ক্যান করতে পারে -exec rm {} +
তবে এটি সম্প্রসারণের মতোই ধীর। আপনি কল করতে পারেন -delete
যা unlink
কার্নেলের অভ্যন্তরীণ কল ব্যবহার rm
করে (যেমন করে) তবে এটি কেবল ফাইলগুলির জন্য প্রথমে কাজ করবে।
সুতরাং পুনরাবৃত্তি, যদি না আপনি তরল গরম ম্যাগমা মধ্যে ডিস্ক নিক্ষেপ, rm
বাদশাহ হয় ।
সম্পর্কিত নোটে, বিভিন্ন ফাইল সিস্টেমগুলি কীভাবে কাঠামোগত হয় তার কারণে বিভিন্ন হারে জিনিসগুলি মুছে দেয়। আপনি যদি নিয়মিত এই কাজটি করে থাকেন তবে আপনি এই ফাইলগুলি এক্সএফএসে ফরম্যাট করা একটি পার্টিশনে এই ফাইলগুলি সংরক্ষণ করতে চাইতে পারেন যা মুছে ফেলা খুব দ্রুত পরিচালনা করতে পারে।
অথবা একটি দ্রুত ডিস্ক ব্যবহার করুন। আপনার যদি টন র্যাম থাকে তবে /dev/shm
(একটি র্যাম ডিস্ক) ব্যবহার করা কোনও ধারণা হতে পারে।
unlink
ডিরেক্টরীগুলিতে সিস্টেম কলটি আসলে ব্যবহার করতে পারবেন না (আপনি একটি EISDIR
ত্রুটি পাবেন), যাতে প্রথম বিকল্পটি সম্ভব না।
mv
বিভিন্ন ফাইল সিস্টেম / পার্টিশনের মধ্যে ইঙ্গিত করার অর্থ একটি cp
অনুসরণ করা হয় rm
।
/tmp
একই ফাইল সিস্টেমে থাকে তবে আমি ভাবছি mv
এবং পুনরায় চালু করার কাজটি আরও দ্রুত হবে কিনা? যাই হোক না কেন /tmp
ব্যবহার করে সাফ করা হয়েছে কিনা তা আমি নিশ্চিত নই rm
।
rsync
এই বেঞ্চমার্ক ক্ষেত্রে চেয়ে দ্রুত rm -rf
: web.archive.org/web/20130929001850/http://linuxnote.net/...
কখনও কখনও, find $DIR_TO_DELETE -type f -delete
তুলনায় দ্রুত rm -rf
।
আপনি চেষ্টা করে দেখতেও পারেন mkdir /tmp/empty && rsync -r --delete /tmp/empty/ $DIR_TO_DELETE
।
অবশেষে, যদি আপনি একটি সম্পূর্ণ পার্টিশন বিষয়বস্তুর মোছার প্রয়োজন, দ্রুততম সম্ভবত হতে হবে umount
, mkfs
এবং পুনরায় mount
।
type -f
একটি ফাইল এবং না একটি ডিরেক্টরি বোঝাতে? এছাড়াও, -print
ফাইলগুলি মুছে ফেলা হচ্ছে তা যুক্ত করে।
আপনার যদি খালি জায়গার প্রয়োজন না হয় তবে দ্রুততম উপায়টি মুছে ফেলাতে বিলম্ব করছে এবং ব্যাকগ্রাউন্ডে এটি করুন:
তারপরে একটি ক্রন্টব রয়েছে যা এটি নীচে I / O প্রিভিরিটি সহ একটি শান্ত সময়ে, ব্যাকগ্রাউন্ডে করে:
3 3 * * * root ionice -c 3 nice find /path/to/.delete_me -maxdepth 1 ! -name \. -exec echo rm -rf "{}" +
নোট:
আপডেট: আমি সমান্তরালভাবে একাধিক আরএম চালানোর জন্য একটি ঝরঝরে কৌশল পেয়েছি - আপনার যদি একটি বড় ডিস্ক অ্যারে থাকে তবে এটি সাহায্য করবে:
ionice -c 3 nice find target_directory -depth -maxdepth 3 | xargs -d \n -P 5 -n 5 rm -rf
- একটি গভীরতা-প্রথম traversal করতে।
-ম্যাক্সডেপথ ডিরেক্টরি ট্র্যাভারসালের গভীরতা সীমাবদ্ধ করতে যাতে আমরা পৃথক ফাইলগুলি শুনতে না পেলাম।
-d file n ফাইলের নামগুলিতে ফাঁকা স্থান পরিচালনা করতে।
-পি এবং -n সমান্তরালতার ডিগ্রি পরিচালনা করে (মানচিত্রটি পরীক্ষা করুন)।
রেফ: http://blog.liw.fi/posts/rm-is-too-slow/#comment-3e028c69183a348ee748d904a7474019
আপডেট 2 (2018): উবুন্টু 18.04 এর সাথে জেডএফএস প্রেরণ সহ আমি এটি সবকিছুর জন্য ব্যবহার করি এবং আমি কোনও বড় প্রকল্পের জন্য একটি নতুন ডেটাসেট তৈরি করব । আপনি যদি আগে থেকে পরিকল্পনা করেন এবং এটি আগে থেকে করেন তবে আপনি কাজ শেষ হয়ে গেলে কেবল একটি ফাইল সিস্টেম "zfs ধ্বংস" করতে পারবেন। ;-)
আমি জেডফসনলিন্স উইকি থেকে উবুন্টুকে জেডএফএসে স্থানীয়ভাবে ইনস্টল করতে নির্দেশাবলী ব্যবহার করেছি: https://github.com/zfsonlinux/zfs/wiki/Ubuntu-18.04- রুট- অন- জেডএফএস
find target_dir -maxdepth 3 -depth -type d -print0 | xargs -0 -P 5 rm -rf
। -depth
বিকল্প বলে find
প্রথম তালিকাটি শিশুদের।
আমি মনে করি যে সমস্যাটি হ'ল খুব বড় ডিরেক্টরি এবং এর সম্পূর্ণ সামগ্রীর একটি সত্যিকারের সূচিযুক্ত ফাইলিং সিস্টেমের সাথে মুছে ফেলার কোনও সঠিক উপায় নেই যা লিঙ্কমুক্ত বোঝে এবং এর অর্থ এই নয় যে এটিতে এটি ফাইল অ্যালা এফএসসিকে হারিয়েছে doesn't একটি বিশ্বাস থাকতে হবে।
উদাহরণস্বরূপ আমার কাছে গলফ রেঞ্জের জন্য জোনমিন্ডার চলছে। তিনি এক দিন (১৩ ক্যামেরার ফিড) ক্যাপচার করেন যে কীভাবে তিনি 120 গিগাবাইট ড্রাইভে দৌড়েছিলেন তা আমার ছাড়িয়ে যায় 1.5 লম্বা গল্পের সংক্ষিপ্ত বিবরণে সমস্ত ক্যাপচার করা ডেটার ফোল্ডারটি তার স্টোরেজের প্রায় 1.4 টিবি। শুদ্ধ করার জন্য প্রচুর
জেডএম পুনরায় ইনস্টল করা এবং 1.4 টিবি পুরানো লাইব্রেরিটি পরিষ্কার করা কোনও মজাদার নয় কারণ পুরানো চিত্রগুলি মুছতে 1 - 2 দিন সময় লাগতে পারে।
সত্যিকারের ইনডেক্সড এফএস ডিরেক্টরিটি ড্রপ করার অনুমতি দেয় এবং জানে যে এর অধীনে থাকা ডেটা মারা গেছে এবং ডেটা শূন্য করা আমাদের সময় এবং পিসি সংস্থার অপচয় করা। মুছে যাওয়া ডেটা শূন্য করার বিকল্প হতে হবে। আরএম এক্সট্রা 4 এ রিয়েল ওয়ার্ল্ডে কেবল দীর্ঘ সময় নেয়।
উত্তর: পুনরাবৃত্তভাবে সমস্ত ফাইল লিঙ্ক করা দ্রুত প্রান্তিক হবে তবে এফএসসিকে চালানোর জন্য আপনাকে এখনও একটি সময় নির্ধারণ করতে হবে।
একটি রিকার্সিভ "ফর" কমান্ড চলমান একটি স্ক্রিপ্ট তৈরি করুন যা আপনার ফোল্ডারগুলির নীচে সমস্ত ফাইলকে "লিঙ্কমুক্ত" করতে পারে তারপরে এটি পরিষ্কার করতে সমস্ত ফোল্ডারকে কেবল আরএম বা rmdir করতে পারে। সুবিধাজনক হলে বাকী ডেটা শূন্য করতে ম্যানুয়ালি এফএসসিকে চালান। কিন্ডা অলস এটি লিখে ফেলেনি দুঃখিত :)।
যাইহোক আপনি যদি কোনও বিদ্যমান ডিরেক্টরি মুছে ফেলতে চান তবে দরকারী নয়, আমি উল্লেখ করব যে একটি সম্ভাব্য কৌশল যদি আপনি জানেন যে আপনার কাছে নিয়মিত খাঁজ করতে হবে এমন একটি প্রচুর ফাইলের একটি ডিরেক্টরি রয়েছে যা আপনার নিজের ফাইল সিস্টেমে ডিরেক্টরিটি স্থাপন করতে হবে ( যেমন , বিভাজন)। তারপরে আপনাকে যখন এটি পরিষ্কার করতে হবে, এটি আনমাউন্ট করুন, একটি চালান mkfs
, এবং এটি পুনরায় মাউন্ট করুন । উদাহরণস্বরূপ ওপেনবিএসডি এটি করার জন্য পরামর্শ দেয়/usr/obj
, যেখানে সিস্টেম তৈরির সময় অনেকগুলি ফাইল তৈরি হয় এবং পরবর্তী বিল্ডের আগে অবশ্যই মুছে ফেলা উচিত।