কমান্ড লাইনের মাধ্যমে আকারে 0 বাইটের ফাইল সরান?


16

সুতরাং, আমি অন্যান্য ডিরেক্টরিতে ভরা একটি ডিরেক্টরি পেয়েছি এবং আমি ভাবছিলাম যে কোনও আকার নেই এমন ফাইলগুলি সরিয়ে ফেলা সম্ভব কিনা। সাধারণত এই ফাইলগুলি 0 বাইট হয় এবং যেহেতু আমি এই সমস্ত সাবডিয়ারগুলিকে একত্রীকরণ করতে চাই আমি একটি নিখুঁতভাবে আইনী ফাইলটি একটি ওজনহীন 0 বাইট ফাইলের সাথে প্রতিস্থাপন করতে পারি এবং আমার লাইট ফাইলটি সেখানে যায়। শূন্য বাইট ফাইলগুলি সরানোর কোনও উপায়?

উত্তর:


34

ব্যবহার করুন খুঁজুন আকার দ্বারা ফাইল খুঁজে পেতে এবং মানক আউটপুটে ফাইলের নাম প্রিন্ট করতে কমান্ড।

find . -type f -size 0b -print

প্রতিস্থাপন -printসঙ্গে -deleteফাইল মোছার পরিবর্তে পর্দায় তাদের মুদ্রণ করতে।

find . -type f -size 0b -delete

এখন, ফাইলগুলি এক অবস্থান থেকে অন্য স্থানে সরিয়ে নেওয়ার কোনও উপায় আছে এবং দ্বন্দ্বের সাথে আকারটি একই হলে প্রতিস্থাপন করা হবে তবে আকারটি পৃথক হলে উভয় অনুলিপি রাখুন?
— ব্যবহারকারী245115

এটি rsync এর জন্য একটি কাজের মতো শোনাচ্ছে ।

7
আপনি -emptyপরিবর্তে ব্যবহার করতে পারেন -size 0b।
— কেভিন

6

0 টি আকারের পুনরাবৃত্তভাবে সমস্ত ফাইল সন্ধান এবং সরিয়ে ফেলুন:

find . -type f -size 0 -print0 | xargs -I{} -0 rm {}

উদাহরণ:

% ls -og   
total 4
-rw-rw-r-- 1 0 Jun  7 20:31 bar
-rw-rw-r-- 1 5 Jun  7 20:29 foo

% find . -size 0 -print0 | xargs -I{} -0 rm {}

% ls -og                                      
total 4
-rw-rw-r-- 1 5 Jun  7 20:29 foo

4

আপনি এটি সরাসরি শেলও করতে পারেন। আপনি যদি খালি গোপন ফাইল (যাদের নাম দিয়ে শুরু হয় .) মুছতে না চান তবে এটি কার্যকর হতে পারে । আপনি এটির findপাশাপাশি এটি করতে পারতেন , তবে একটি বিকল্প হ'ল শেলটি নিজেই ব্যবহার করা হবে:

shopt -s globstar
for file in **/*; do [ ! -s "$file" ] && [ -f "$file" ] && rm "$file"; done

ব্যাখ্যা

  • shopt -s globstar: বাশের জন্য গ্লোবস্টার বিকল্পটি চালু করে যা **এক বা একাধিক সাব-ডিরেক্টরিকে ম্যাচ করে। **/*বর্তমান ডিরেক্টরি এবং এর সমস্ত উপ-ডিরেক্টরিতে সমস্ত ফাইল এবং ডিরেক্টরি মিলবে।
  • for file in **/*; do ...; done : পাওয়া সমস্ত ফাইল এবং ডিরেক্টরিতে পুনরাবৃত্তি;
  • [ ! -s "$file" ]: [ -s "$file" ]ফাইলটি বিদ্যমান থাকলে এবং খালি না হলে সত্য। সুতরাং, [ ! -s "$file" ]( !পরীক্ষাটি উল্টে দেয়) সত্য যদি ফাইলটি বিদ্যমান না থাকে বা এটি খালি থাকে।
  • [ -f "$file" ]: সত্য যদি ফাইলটি নিয়মিত ফাইল হয়। ডিরেক্টরি বা ডিভাইস ফাইল বা একটি সিমিলিংক ইত্যাদি নয়
  • rm "$file" : ফাইলটি মুছুন।

&&নিশ্চিত করুন যে পরবর্তী কমান্ড শুধুমাত্র যদি আগের সফল হয়েছে তাই এই শুধুমাত্র ফাঁকা, নিয়মিত ফাইল মুছে ফেলবে চালানো হয়।


এবং আমি ভেবেছিলাম, আমার উত্তর জটিল is :) +1
— এবি

2

যদিও উপরের বেশিরভাগ উত্তর সঠিক, তবে এই আদেশটি একবার দেখুন:

0 বাইট সাইজের ফাইলটির অর্থ একটি খালি ফাইল

যদিও আপনি এই আদেশটি চালাতে পারেন:

find . -type f -empty -delete

এটি সমস্ত খালি ফাইল মুছে ফেলবে।

আপনি মুছে ফেলার আগে এই ফাইলগুলি একবার দেখে নিতে পারেন:

find . -type f -empty

উবুন্টুতে 14.04 এলটিএস ছাড়া -type f, -emptyখালি ডিরেক্টরিগুলিও মুছবে। সবেমাত্র ম্যান পৃষ্ঠাটি পরীক্ষা করে দেখুন।
— বুড়ুশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.