आपको कई चीजें मिली हुई लगती हैं।
set today = 'date +%Y'
tcsh सिंटैक्स की तरह दिखता है, लेकिन tcsh में भी यह date +%Y
वैरिएबल को स्ट्रिंग असाइन करता है today
, यह date
कमांड को रन नहीं करता है । जैसा कि आप शायद bash या कुछ अन्य POSIX शेल का उपयोग कर रहे हैं, असाइनमेंट का सिंटैक्स है today=some_value
(समान चिह्न के आसपास कोई स्थान नहीं है)। कमांड चलाने और इसके आउटपुट को वेरिएबल में असाइन करने के लिए, कमांड प्रतिस्थापन का उपयोग करें :
today=$(date +%Y-%m-%d)
(मैंने तारीख विनिर्देश भी पूरा कर लिया है)। आप डॉलर-कोष्ठक के बजाय बैकक्वाट्स का उपयोग कर सकते हैं, लेकिन यह आगे के उद्धरणों के साथ नेत्रहीन रूप से भ्रमित होने का खतरा है, और जब आपको बैकक्ओटेड कमांड के अंदर उद्धरण चिह्नों की आवश्यकता होती है तो नियम बहुत जटिल और कार्यान्वयन-निर्भर होते हैं, इसलिए इसे छड़ी न करना बेहतर है $(…)
(जो एक सायरन सिंटैक्स के साथ एक ही प्रभाव है)।
आपने &
कई आदेशों के अंत में उपयोग किया । यह पृष्ठभूमि में कमांड निष्पादित करता है, जो यहां नहीं चाहता है। मुझे संदेह है कि आप का मतलब है &&
, जिसका मतलब है कि अगली कमांड निष्पादित करने के लिए केवल अगर पहली कमांड सफल हुई।
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)।
:
क्योंकि तब इसे rsync और scp में होस्ट के रूप में पढ़ा जाएगा। stackoverflow.com/a/37143274/390066