जाँचें कि क्या निर्देशिका मौजूद है और एक कमांड यूनिक्स में हटा दें


107

क्या यह जांचना संभव है कि क्या कोई निर्देशिका मौजूद है और यदि वह करता है, तो यूनिक्स एकल कमांड का उपयोग करके हटा सकता है? मेरे पास ऐसी स्थिति है जहां मैं ANT 'sshexec' कार्य का उपयोग करता हूं जहां मैं रिमोट मशीन में केवल एक ही कमांड चला सकता हूं। और मुझे यह जाँचने की आवश्यकता है कि क्या निर्देशिका मौजूद है और इसे हटा दें ...


क्यों नहीं rmdir का उपयोग करें? यदि निर्देशिका मौजूद नहीं है, तो यह विफल हो जाएगा।
फेर्रुकियो

4
यह विफल हो जाएगा। और मेरी ANT स्क्रिप्ट में त्रुटि। यह मेरे निर्माण को दुर्घटना का कारण बनेगा।
रेमो

mkdir -pयदि यह पहले से मौजूद है, तो त्रुटियों का उपयोग करना अनदेखा कर देगा।
यूजर 562374

2
@ फेर्रुकियो- rm -rf / dir_name का उपयोग करने से कोई त्रुटि नहीं होती है, लेकिन rm -rf / dir_name फेंकता है, ऐसी कोई फ़ाइल या निर्देशिका नहीं मिली। (बस परीक्षण किया गया)
रेमो

3
@remo भाई आपने सिर्फ दो बार एक ही कमांड पोस्ट किया
मार्कोस परेरा

जवाबों:


149

मान लिया गया $WORKING_DIRहै कि यह निर्देशिका के लिए सेट है ... यह एक-लाइनर को करना चाहिए:

if [ -d "$WORKING_DIR" ]; then rm -Rf $WORKING_DIR; fi

(अन्यथा सिर्फ अपनी निर्देशिका से बदलें)


163

सिर्फ उपयोग क्यों नहीं rm -rf /some/dir? यदि यह मौजूद है तो निर्देशिका को हटा देगा, अन्यथा कुछ भी न करें। rm -r /some/dirयदि फ़ोल्डर मौजूद नहीं है, तो कमांड के इस स्वाद के विपरीत क्रैश नहीं होगा।


13
मुझे लगता है कि मूल प्रश्न का अर्थ यह था: फ़ाइल / निर्देशिका मौजूद है या नहीं, केवल तभी डिलीट करें। यह कमांड काम कर सकता है और समान परिणाम दे सकता है, लेकिन वास्तव में कमांड के अधिक परीक्षण करने से पहले परीक्षण करना।
अंकुर चौहान

5
@AnkurChauhan +1, अगर डायर मौजूद नहीं है तो मुझे चेतावनी मिली।
inf3rno

12
यह सवाल का जवाब नहीं है।
xpto

10
जैसा कि ऊपर कहा गया है इसका उत्तर नहीं है। हटाने से पहले परीक्षण करने का एक कारण जेनकींस नौकरी के अंदर होगा। यदि निर्देशिका मौजूद नहीं है और आप इसे हटाने का प्रयास करते हैं, तो यह कार्य विफल हो जाएगा। पहले से जाँच करना बेहतर विकल्प है।
lumberjacked

8
मुझे लगता है कि यह सही उत्तर है। यह वही करता है जो @remo की जरूरत है, यानी किसी निर्देशिका को केवल तभी हटाता है यदि वह मौजूद है और यदि वह नहीं है तो कोई त्रुटि नहीं देता है। शायद सवाल बहुत अच्छी तरह से नहीं रखा गया है क्योंकि जब आप इस आदेश की परवाह नहीं करेंगे तो आपको अस्तित्व की जांच करने की आवश्यकता क्यों होगी ?!
पद्रम बाशिरी

32

प्रयत्न:

bash -c '[ -d my_mystery_dirname ] && run_this_command'

संपादित करें : यह काम करेगा यदि आप रिमोट मशीन पर बैश चला सकते हैं ...।

EDIT 2 : बैश में, यह [ -d something ]चेक करता है कि क्या निर्देशिका 'कुछ' नाम की है, एक सफलता कोड लौटाता है अगर यह मौजूद है और एक निर्देशिका है। चाइनिंग कमांड & && के साथ दूसरी कमांड तभी चलती है जब पहले वाला सफल हुआ हो। तो [ -d somedir ] && commandकेवल कमांड चलाता है अगर निर्देशिका मौजूद है।


हां, और इसे शेल में आज़माकर सुनिश्चित करें कि आप जो चाहते हैं वह है।
sinelaw

पहले मैं यह देखना चाहता हूं कि क्या यह स्थानीय स्तर पर काम करता है और मैं इन्हें रिमोट से कमांड भेज सकता हूं। क्या मैं "जाँच / परीक्षण" निर्देशिका .. अन्याय [-d / परीक्षण] और & mkdir / परीक्षण की जाँच करने के लिए कह रहा हूँ?
रेमो

1
यदि यह मौजूद है तो इसे एक त्रुटि देनी चाहिए, क्योंकि यह जाँचता है कि क्या निर्देशिका मौजूद है, और यदि हाँ इसे बनाने की कोशिश करता है। यही मेरे लिए है (बस परीक्षण)। यह एक निर्देशिका नहीं बनाना चाहिए। चूँकि आप चाहते हैं कि आपको इसकी आवश्यकता हो: [ -d /test ] && rmdir /test(या rm -rf / परीक्षण अगर यह खाली नहीं होने वाला है और आप सभी सामग्रियों को हटाना चाहते हैं)
sinelaw

@ साइनलाइन: नोट - जब निर्देशिका मेरे लिए मौजूद थी, और यह एक निर्देशिका बनाने की कोशिश कर रहा था, तो यह त्रुटि नहीं थी! (फिर से परीक्षण किया)। लेकिन DELETE के लिए यह काम करता है। कृपया उस पर दोबारा जांच करें
रेमो

शर्मा: क्या आप बैश का उपयोग कर रहे हैं? 'इको $ शेल' क्या कहता है?
sinelaw

0

यहाँ एक और लाइनर है:

[[ -d /tmp/test ]] && rm -r /tmp/test
  • && का अर्थ उस कथन को निष्पादित करना है जो केवल इस प्रकार होता है यदि पूर्ववर्ती कथन सफलतापूर्वक निष्पादित किया गया है (बाहर निकलें शून्य शून्य)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.