2017-03-07 8 views
6

मेरे पास एक शेल स्क्रिप्ट है और मैं एक पंक्ति या दो जोड़ना चाहता हूं जहां यह केवल लॉग फ़ाइल को हटा देगा यदि यह मौजूद है। वर्तमान में मेरी स्क्रिप्ट बस करता है:अगर मैं मौजूद हूं तो मैं केवल फाइल को कैसे हटा सकता हूं?

rm filename.log 

लेकिन अगर फ़ाइल नाम मौजूद नहीं है मैं कह रहा filename.log मौजूद नहीं है, नहीं निकाल सकते संदेश मिलता है। यह समझ में आता है लेकिन मैं यह देखना नहीं चाहता कि हर बार जब मैं स्क्रिप्ट चलाता हूं। क्या आईएफ स्टेटमेंट के साथ कोई बेहतर तरीका है, मैं इसे पूरा कर सकता हूं?

+1

ठीक है, ऐसी फ़ाइल को निकालना पूरी तरह असंभव है जो मौजूद नहीं है, इसलिए ऐसा लगता है कि "फ़ाइल को केवल तभी हटाएं" की अवधारणा अनावश्यक है। तो, 'आरएम-एफ फाइलनाम', या 'आरएम फाइलनाम 2 >>/dev/null', या '[[-r filename]] && rm filename' कुछ विकल्प होंगे .. – twalberg

उत्तर

18

rm को -f तर्क पास है, जो यह स्थिति के इलाज के लिए जहां नाम की फ़ाइल सफलता के रूप में मौजूद नहीं है कारण होगा, और कहा कि मामले में किसी भी त्रुटि संदेश को दबाने होगा: क्या आप सचमुच

rm -f -- filename.log 

पूछा अधिक की तरह होगा:

[ -e filename.log ] && rm -- filename.log 

लेकिन यह टाइप करने के लिए अधिक है और अतिरिक्त विफलता मोड कहते हैं। (अगर [ के बाद फ़ाइल को कुछ और हटा दिया गया है, लेकिन rm इससे पहले इसे हटा देता है, तो आप फिर से विफल होने पर वापस आ गए हैं)।

एक तरफ के रूप में, -- के कारण फाइलनाम को शाब्दिक माना जाता है भले ही यह एक प्रमुख डैश से शुरू होता है; यदि आपके नाम चर से आ रहे हैं या अन्यथा कड़ाई से नियंत्रित नहीं हैं, तो आपको इन आदतों का उपयोग करना चाहिए।

+0

ये विकल्प बहुत अच्छी तरह से काम किया! धन्यवाद चार्ल्स !! – user7649922

+0

सुझाया गया समाधान शायद प्रश्न की आवश्यकताओं को पूरा नहीं करता है। अंतर संरक्षित फाइलों में लिखा गया है: यदि फ़ाइल मौजूद है और संरक्षित है, तो आपको अपने मूल समाधान के साथ एक त्रुटि संदेश मिलेगा, जबकि फ़ाइल को चार्ल्स डफिस समाधान द्वारा चुपचाप हटा दिया जाएगा। – user1934428

+0

@ user1934428, मुझे इस सवाल में कोई आवश्यकता नहीं दिख रही है कि व्यवहार प्रतिद्वंद्वियों में यह परिवर्तन। क्या आप इसे कहां दिया जा सकता है? –

1
if [ ! -f 'absolute path of file' ] 
then 
    echo "File does not exist. Skipping..." 
else 
    rm 'absolute path of file' 
fi 

यदि आप निम्न का उपयोग करते हैं तो इसे काम करना चाहिए।

+0

चूंकि ओपी सशर्त बनाने की कोशिश कर रहा है 'आरएम', बनाम' इको ', तर्क यहां उलटा लगता है। और पथ को पूर्ण होने की कोई आवश्यकता नहीं है। –

+0

धन्यवाद चार्ल्स! मैं इसे फ़ाइल हटाना लॉगिन जोड़ने के लिए अद्यतन करता हूं। यदि अभिव्यक्ति का परीक्षण करना है कि फ़ाइल मौजूद नहीं है तो किसी भी फाइल को मिस्ड होने पर ट्रैकिंग के लिए बस एक कथन छोड़ें और मुद्रित करें। –

+0

राजेश, मैंने प्रस्ताव का उपयोग करने का प्रयास किया, हालांकि, मुझे निम्न त्रुटि मिलती है: [: गायब ']' मैं आपके दृष्टिकोण के साथ-साथ चार्ल्स की कोशिश करूंगा! – user7649922

0

पहले फ़ाइल को स्पर्श करें, जो इसे मौजूद नहीं करेगा, लेकिन अगर यह मौजूद है तो केवल टाइमस्टैम्प बदलें।

touch filename && rm filename 

कम कुशल, लेकिन याद रखना आसान है।

संबंधित मुद्दे

 संबंधित मुद्दे