আপনি বেশ কয়েকটি জিনিস মিশ্রিত করেছেন বলে মনে হচ্ছে।
set today = 'date +%Y'
দেখতে tcsh সিনট্যাক্সের মতো, তবে tcsh তেও এটি স্ট্রিংটি date +%Y
ভেরিয়েবলের জন্য নির্ধারণ করে today
, এটি date
কমান্ডটি চালায় না । যেহেতু আপনি সম্ভবত বাশ বা অন্য কোনও পসিক্স শেল ব্যবহার করছেন, একটি অ্যাসাইনমেন্টের বাক্য গঠনটি today=some_value
(সমান চিহ্নের চারপাশে কোনও ফাঁকা স্থান নেই)। কমান্ডটি চালাতে এবং এর আউটপুটটি ভেরিয়েবলের কাছে নির্ধারণ করতে, কমান্ড প্রতিস্থাপন ব্যবহার করুন :
today=$(date +%Y-%m-%d)
(আমি তারিখের নির্দিষ্টকরণও শেষ করেছি)। আপনি ডলার-প্রথম বন্ধনী পরিবর্তে backquotes ব্যবহার করতে পারেন, কিন্তু এটা চাক্ষুষরূপে এগিয়ে কোট সঙ্গে গুলিয়ে ফেলা হচ্ছে প্রবণ, এবং যখন আপনি একটি backquoted কমান্ড ভিতরে কোট প্রয়োজন জন্য নিয়ম প্রশংসনীয় জটিল এবং বাস্তবায়ন নির্ভর, তাই এটি বিদ্ধ না ভাল $(…)
(যা স্যানার সিনট্যাক্সের সাথে একই প্রভাব রয়েছে)।
আপনি &
বেশ কয়েকটি কমান্ডের শেষে ব্যবহার করেছেন। এটি কমান্ডটিকে পটভূমিতে কার্যকর করতে সক্ষম করে, যা এখানে চাইছিল না। আমি সন্দেহ করি যে আপনি বোঝাতে চেয়েছিলেন &&
, যার অর্থ প্রথম কমান্ড সফল হলে কেবল পরবর্তী কমান্ড কার্যকর করা।
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
&&
প্রতিটি কমান্ডের পরে ব্যবহারের বিকল্প হ'ল আপনার স্ক্রিপ্টটি দিয়ে শুরু করা set -e
। এটি শেলটিকে স্ক্রিপ্টটি চালানো বন্ধ করতে বলেছে যে কোনও কমান্ড ননজারো স্থিতি ফেরত দেওয়ার সাথে সাথে ( if
শর্তাবলী এবং অন্যান্য কয়েকটি ক্ষেত্রে কমান্ড বাদে )।
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
আপনার find
আদেশটি ঠিক আছে তবে সম্ভবত আপনি যা করতে চান তা করেন না (যদিও এটি কী তা আমি নিশ্চিতভাবে জানি না)।
আপনি একটি ডিরেক্টরি তৈরি করছেন mkdir
এবং তারপরে এটির সাথে সাথে ট্র্যাভার করে চলেছেন find
। ডিরেক্টরিটি ইতিমধ্যে উপস্থিত না থাকলে এটি কার্যকর হবে না। আপনি কি আজকের লগগুলির জন্য একটি ডিরেক্টরি তৈরি এবং সাম্প্রতিক ফাইলগুলি The_Logs
উদাহরণস্বরূপ কোনও ডিরেক্টরিতে স্থানান্তরিত করতে চান The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
বা প্রত্যয় যুক্ত করার জন্য আপনি কি আজকের লগ ফাইলগুলির নাম পরিবর্তন করতে চান $today
? এর জন্য প্রতিটি ফাইলের সরানোর জন্য আলাদা ফাইলের নাম গণনা করা দরকার।
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
নোট করুন যে আমি -mtime
ফাইলগুলি পরিবর্তনের সময়ের উপর ভিত্তি করে সরিয়ে নিয়েছি -atime
এবং ফাইলটি সর্বশেষ পঠনের সময়টি ছিল না (যদি আপনার সিস্টেম এটির উপর নজর রাখে - যদি তা না হয় তবে সময়টি আগের মতোই ফিরে আসতে পারে) র দ্বারা mtime)।
:
কারণ এটি তখন আরএসসিএনসি এবং স্কিপিতে হোস্ট হিসাবে পড়বে। stackoverflow.com/a/37143274/390066