আমি নির্দিষ্ট সময়ের মধ্যে তৈরি ফাইলগুলিকে কীভাবে সরানো বা মুছতে পারি?


0

আমি বেশ কয়েক সপ্তাহ ব্যাপী সময়কালীন সিনেমাগুলি তৈরি করছি এবং রাতের বেলা তোলা ছবিগুলি থেকে মুক্তি পেতে চাই (অর্থাত্ এই ক্ষেত্রে 22:45 থেকে 5:00 এর মধ্যে), আমি কীভাবে সহজে এটি করতে পারি?

আমি নিম্নলিখিত আংশিক সমাধান খুঁজে পেয়েছি:

  • ব্যবহার করা find -newerXYএবং বিশেষভাবে -newermtসম্ভব হবে তবে আমাকে সমস্ত তারিখের পাশাপাশি লুপ করতে হবে,
  • statএমটাইম ক্যোয়ারী ব্যবহার করে , তবে কীভাবে সহজে সময়ের সাথে তুলনা করা যায় তা আমি জানি না।

আমি এখন এটি ম্যানুয়ালি করছি, তবে আমি নিশ্চিত আরও একটি মার্জিত সমাধান থাকতে হবে। কোন ধারনা? ধন্যবাদ! :)

উত্তর:


1

সহ stat(একই ডিরেক্টরিতে সমস্ত ফাইল ধরে)

stat -c '%y %n' * | grep -E ' (22:4[5-9]|22:5|23:|0[0-4]:)' | cut -d ' ' -f 4 | xargs mv -t $dirForRemovedFiles
  • এটি ধরে নিয়েছে যে স্ট্যাটের আউটপুটে লোকেলের উপর নির্ভর করে না (এটি মনে হয় না ...), অন্যথায় লোকেলটিকে "সি" তে বাধ্য করুন।
  • এটি ধরে নেওয়া যায় যে সমস্ত ফাইল একই ডিএসটি বিভাগে রয়েছে।
  • উদ্ধৃতি এবং প্রথম বন্ধনের মধ্যবর্তী স্থানটি নোট করুন, এটিই টাইম স্ট্যাম্পের শুরুতেই রেজিএক্সপাকে ম্যাচ করে।
  • সুরক্ষার জন্য, উপরের কমান্ডটি কোনও কিছুই মুছে দেয় না, এটি কেবল ফাইলগুলিকে একটি ডিরেক্টরিতে নিয়ে যায় যেখানে আপনি rm *একবার জোর দিয়েছিলেন যে আপনি কোনও কিছু মিস করছেন না।
  • আপনি যদি ভৌতিক, grep -E '^.{10} (22:4[5-9]|22:5|23:|0[0-4]:)'মিথ্যা হিট এড়াতে ব্যবহার করুন ।

সতর্কতা: এটা খুলছেনা কাজ হতে পারে কিন্তু এটি মনে রাখা দরকার যে স্ট্রিং (যেমন মিলে সহ একটি ফাইল আছে কিনা foo 23:barতার মধ্যে) ফাইলের নাম তারপর এটা তার র দ্বারা mtime নির্বিশেষে সরানো হবে। অন্য একটি সমস্যা: একটি ফাইলের নামের সাথে একটি নতুন লাইন থাকা ফাইলটি সরানো হবে না বলে আমি মনে করি।
কামিল ম্যাকিয়েরোভস্কি

রিজএক্সপক্স সামঞ্জস্য করা পাঠকের কাছে অনুশীলন হিসাবে ছেড়ে গেছে। যদি তাদের নামে নতুন লাইনের ফাইল থাকে তবে আপনার খুব
আফসোসের

1

এই আধা-একক লাইনটি "নাইটলি" ফাইলগুলি মুদ্রণ করবে:

( \
llimit=$((60*5+0)); \
ulimit=$((60*22+45)); \
find -type f -exec bash -c '\
hm=`stat -c "%y" "$0" | cut -c 12-16`; \
t=$((60*10#`echo $hm | cut -c 1-2`+10#`echo $hm | cut -c 4-5`)); \
test \( $t -lt $1 \) -o \( $t -gt $2 \)' \
{} $llimit $ulimit \; \
-print \
)

উপ-লাইনগুলি ব্যাখ্যা করেছে:

  1. ভেরিয়েবল স্থানীয় করার জন্য একটি সাবশেল শুরু করে।
  2. গত মধ্যরাতে মিনিটের মধ্যে নিম্ন সীমাটি গণনা করে।
  3. উপরের সীমা গণনা করে।
  4. প্রতিটি ফাইলের জন্য একটি পৃথক bashকার্যকর করা হয়; এটি পাটিগণিত করবে।
  5. এমটাইম এক্সট্রাক্ট হিসাবে HH:MM
  6. HH:MMমধ্যরাতের মিনিট হিসাবে মানকে রূপান্তর করে।
  7. প্রাক্কলিত সীমাবদ্ধতার সাথে এই মানটির তুলনা করে।
  8. এগুলি অন্তরের পক্ষে যুক্তিযুক্ত bash; ভিতরে, তারা হিসেবে উল্লেখ করা হয় $0, $1, $2
  9. পূর্ববর্তী পরীক্ষাটি যদি সত্য হয় তবে পথটি মুদ্রণ করে।
  10. সাবশেল শেষ।

কিছু মন্তব্য:

  • -execঅনুরোধ একটি পরীক্ষা হিসাবে কাজ করতে পারেন find। এটি খুব শক্তিশালী, তবে খুব শক্তিশালী। এই ক্ষেত্রে পরীক্ষাটি সত্য হয় যখন অভ্যন্তরীণ bashকমান্ড লাইনের চূড়ান্ত অংশটি (যেমন test) সত্য ফিরে আসে (অর্থাত্ এটির প্রস্থান স্থিতি হয় 0)।
  • পাটিগণিত ( $((…))) পার্স 01বা অষ্টাল সংখ্যা হিসাবে 08এবং 09এটি অবৈধ অষ্টাল সংখ্যা। এজন্য আমাদের আউটপুট 10#থেকে প্রাপ্ত সমস্ত সংখ্যার statদশমিক হিসাবে ব্যাখ্যা করা উচিত তা নিশ্চিত করতে আমাদের প্রয়োজন ।
  • আমি ব্যবহৃত -ltএবং -gtভিতরে test। ব্যবহার করুন -leএবং / অথবা -geতারা আপনার আরও ভাল মানায়।
  • ফাইলগুলি সরানোর জন্য (বা এগুলি একসাথে ব্যবহার করুন ) -printদিয়ে প্রতিস্থাপন -deleteকরুন -print -delete
  • ফলে একটি ডিরেক্টরির ফাইল স্থানান্তর করার জন্য প্রতিস্থাপন -printসঙ্গে -print0এবং এই মত একটি নল গড়ণ

    (  find  -print0 ) | xargs -0r mv -t /target/directory/
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.