मेरे समाधान की सिफारिश की पृष्ठभूमि एक ऐसे मित्र की कहानी है, जिसने अपनी पहली नौकरी के दूसरे सप्ताह में, आधे बिल्ड-सर्वर को साफ कर दिया था। इसलिए मूल कार्य यह पता लगाना है कि क्या कोई फ़ाइल मौजूद है, और यदि ऐसा है, तो इसे हटा दें। लेकिन इस नदी पर कुछ विश्वासघाती रैपिड हैं:
सब कुछ एक फाइल है।
लिपियों में वास्तविक शक्ति तभी होती है जब वे सामान्य कार्यों को हल करते हैं
सामान्य होने के लिए, हम चर का उपयोग करते हैं
हम अक्सर मैनुअल हस्तक्षेप से बचने के लिए स्क्रिप्ट में -f बल का उपयोग करते हैं
और यह भी सुनिश्चित करने के लिए कि हम समय पर फैशन का निर्माण करें, नकल करें और नष्ट करें।
इस परिदृश्य पर विचार करें:
हमारे पास वह फ़ाइल है जिसे हम हटाना चाहते हैं: filesexists.json
यह फ़ाइल नाम एक चर में संग्रहीत किया जाता है
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
हम चीजों को वास्तव में लचीला बनाने के लिए एक पथ चर भी करते हैं
<host>:~/Documents/thisfolderexists pathtofile=".."
<host>:~/Documents/thisfolderexists ls $pathtofile
filesexists.json history20170728 SE-Data-API.pem thisfolderexists
तो आइए देखें कि -e
क्या करना चाहिए। क्या फाइलें मौजूद हैं?
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
ऐसा होता है। जादू।
हालाँकि, क्या होगा यदि फ़ाइल चर गलती से नफ़िन के लिए मूल्यांकन किया गया है '
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
क्या? यह एक त्रुटि के साथ लौटने वाला है ... और यह कहानी की शुरुआत है कि कैसे दुर्घटना से पूरा फ़ोल्डर हटा दिया गया
एक विकल्प विशेष रूप से परीक्षण के लिए हो सकता है जिसे हम 'फ़ाइल' समझते हैं
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
0
तो फ़ाइल मौजूद है ...
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
1
तो यह एक फ़ाइल नहीं है और शायद, हम उस पूरी निर्देशिका को हटाना नहीं चाहते हैं
man test
कहने के लिए निम्नलिखित है:
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
...
-h FILE
FILE exists and is a symbolic link (same as -L)