ऐसा इसलिए है क्योंकि बैश >
फ़ाइल की सामग्री को हटाते हुए पहले के साथ पुनर्निर्देशन की प्रक्रिया करता है । फिर यह कमांड निष्पादित करता है। क्या आप उपयोग करना चाहते थे >>
, अंतिम 50 पंक्तियों को फ़ाइल में वर्तमान में क्या है, के अंत में जोड़ा जाएगा। इस स्थिति में, आपके पास दो बार दोहराई गई समान 50 लाइनें होंगी।
जब कोई भिन्न फ़ाइल पर पुनर्निर्देशित करता है, तो कमांड अपेक्षित रूप से कार्य करता है। यहाँ फ़ाइल का अंतिम 50 पंक्तियों को उसी नाम की फ़ाइल में लिखने का एक तरीका है:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 && mv /home/pi/Documents/test2 /home/pi/Documents/test
यह पहले अंतिम 50 पंक्तियों को एक अस्थायी फ़ाइल में लिखता है, जिसे फिर mv
मूल फ़ाइल को बदलने के लिए उपयोग किया जाता है।
जैसा कि टिप्पणियों में उल्लेख किया गया है, यह काम नहीं करेगा यदि फ़ाइल अभी भी खुली है। फ़ाइल को स्थानांतरित करने से एक नया इनकोड भी बनता है और यह स्वामित्व और अनुमतियां बदल सकता है। एक अस्थायी फ़ाइल का उपयोग करके ऐसा करने का एक बेहतर तरीका होगा:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 ; cat /home/pi/Documents/test2 > /home/pi/Documents/test
अस्थायी फ़ाइल को भी हटाया जा सकता है, हालांकि हर बार ऐसा होने पर इसकी सामग्री को अधिलेखित कर दिया जाएगा।