কমান্ড লাইনের মাধ্যমে আকারে 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.