फ़ोल्डर को बनाए रखते हुए दोबारा उपयोग किए जा सकने वाले आउटपुट फ़ोल्डर को खाली करने के लिए, ऐसा Mac शॉर्टकट बनाएँ जो केवल उसके अंदर की चीज़ें हटाए। इस चरण-दर-चरण मार्गदर्शिका में एक निश्चित फ़ोल्डर, हटाई जा सकने वाली टेक्स्ट फ़ाइलें और एक शेल स्क्रिप्ट इस्तेमाल की गई है, जो फ़ोल्डर खाली करने से पहले उसकी जाँच करती है।

इस काम का उद्देश्य जनरेट की गई फ़ाइलों के बैचों के बीच एक फ़ोल्डर को रीसेट करना है। उदाहरण में सामान्य फ़ाइलें, नाम में स्पेस वाली एक फ़ाइल, एक छिपी हुई फ़ाइल और एक नेस्टेड फ़ोल्डर शामिल हैं। स्क्रिप्ट इन सामग्रियों को सीधे हटाती है; वह उन्हें Trash में नहीं भेजती। Apple की प्रकाशित rm मैनुअल में रिकर्सिव हटाने और त्रुटि की सूचना देने का विवरण है। Apple की rm मैनुअल

तय करें कि खाली करने के बाद क्या बचा रहना चाहिए

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

उदाहरण का लक्ष्य फ़ोल्डर Shortcut Output Demo है, जो सीधे आपके होम फ़ोल्डर के अंदर है। लक्ष्य को निश्चित रखने से शॉर्टकट की जाँच आसान होती है: उसका व्यवहार इस पर निर्भर नहीं करता कि Finder की कौन-सी विंडो खुली है या कौन-सी फ़ाइल चुनी गई है।

आवश्यकता इस मार्गदर्शिका में व्यवहार
आउटपुट फ़ोल्डर को बनाए रखना केवल उसके अंदर के पथ rm को दिए जाते हैं
छिपा हुआ आउटपुट शामिल करना Bash का dotglob विकल्प डॉट से शुरू होने वाले नाम भी शामिल करता है
पहले से खाली फ़ोल्डर संभालना अंदर की खाली सूची स्वीकार की जाती है
गायब फ़ोल्डर संभालना त्रुटि के साथ रुकें; उसे दोबारा न बनाएँ
नेस्टेड आउटपुट हटाना हर अंदर के फ़ोल्डर को रिकर्सिव तरीके से हटाएँ
Finder के Put Back विकल्प का उपयोग बनाए रखना इसके बजाय नीचे दिया Finder विकल्प अपनाएँ

जब आप आइटम को Trash में रखना चाहते हैं, तो Finder एक उपयोगी विकल्प देता है। आउटपुट फ़ोल्डर खोलें, उसके अंदर हटाई जा सकने वाली चीज़ें चुनें और Command-Delete दबाएँ। उस फ़ोल्डर को चयन से बाहर रखें जिसमें ये आइटम हैं। Apple के अनुसार, Trash में भेजे गए आइटम उसे खाली किए जाने तक वहीं रहते हैं और File > Put Back से वापस लाए जा सकते हैं। Mac पर फ़ाइलें और फ़ोल्डर हटाएँ

पहली बार चलाने के लिए हटाई जा सकने वाली डेमो डायरेक्टरी बनाएँ

Terminal खोलें और नीचे दिया पूरा सेटअप ब्लॉक पेस्ट करें। यह केवल कृत्रिम टेक्स्ट फ़ाइलें बनाता है। फ़ाइलें लिखने से पहले शुरुआती mkdir का सफल होना ज़रूरी है, इसलिए Shortcut Output Demo नाम की कोई मौजूदा फ़ाइल या डायरेक्टरी मिलने पर सेटअप रुक जाता है और उसकी सामग्री दोबारा इस्तेमाल नहीं करता।

/bin/bash <<'BASH'
set -eu
target="$HOME/Shortcut Output Demo"

if ! /bin/mkdir "$target"; then
  printf 'Setup stopped: choose an unused demo folder name.\n' >&2
  exit 1
fi

/bin/mkdir "$target/Batch"
printf 'Synthetic output A\n' > "$target/alpha.txt"
printf 'Synthetic output B\n' > "$target/sample output.txt"
printf 'Synthetic marker\n' > "$target/.demo-marker"
printf 'Synthetic nested output\n' > "$target/Batch/nested.txt"
printf 'Created disposable examples in: %s\n' "$target"
BASH

Finder में अपना होम फ़ोल्डर खोलें और Shortcut Output Demo ढूँढ़ें। इसमें तीन दिखाई देने वाले आइटम हैं: alpha.txt, sample output.txt और Batch। चौथा आइटम, .demo-marker, जानबूझकर छिपाया गया है। Batch के अंदर nested.txt है। ये उदाहरण के लिए दिए गए टेस्ट इनपुट हैं, उपयोगकर्ता की मौजूदा फ़ाइलें नहीं।

अगर नाम पहले से मौजूद होने के कारण सेटअप रुक जाए, तो उस मौजूदा आइटम को वैसा ही छोड़ दें। कोई दूसरा ऐसा डेमो नाम चुनें जो अभी इस्तेमाल में न हो, और सेटअप तथा खाली करने वाली स्क्रिप्ट—दोनों में लक्ष्य की असाइनमेंट बदलकर वही नाम रखें। सिर्फ़ नाम के टकराव से आगे बढ़ने के लिए शुरुआती निर्माण-जाँच न हटाएँ।

शॉर्टकट बनाएँ और उसके इनपुट व आउटपुट के प्रकार बनाए रखें

Shortcuts में नया शॉर्टकट बनाने के लिए जोड़ने वाले बटन पर क्लिक करें और उसका नाम Clear Demo Output रखें। ऐक्शन सूची में Run Shell Script खोजें और वह ऐक्शन जोड़ें। Apple के दस्तावेज़ बताते हैं कि ऐक्शन जोड़कर और सूची में नाम से खोजकर शॉर्टकट बनाए जाते हैं। Mac पर कस्टम शॉर्टकट बनाएँ, Mac पर Shortcuts में ऐक्शन सूची में नेविगेट करें

ऐक्शन का Shell, /bin/bash पर सेट करें, फिर उसमें दिए नमूना कमांड हटाकर नीचे दी गई पूरी सफ़ाई स्क्रिप्ट डालें। यह स्क्रिप्ट Bash ऐरे और shopt का उपयोग करती है, इसलिए यही शेल चुना रहने दें। यह स्क्रिप्ट में दी गई असाइनमेंट से लक्ष्य पढ़ती है; यह शॉर्टकट इनपुट, स्टैंडर्ड इनपुट या कमांड-लाइन आर्ग्युमेंट इस्तेमाल नहीं करती।

अगर स्क्रिप्ट चलाना बंद है, तो Shortcuts > Settings चुनें, Advanced खोलें और Allow Running Scripts चालू करें। Apple शॉर्टकट से स्क्रिप्ट चलाने के लिए इस सेटिंग का विवरण देता है। Apple की स्क्रिप्ट चलाने की सेटिंग

set -u
target="$HOME/Shortcut Output Demo"

if [[ ! -d "$target" || -L "$target" ]]; then
  printf 'Expected an existing ordinary folder: %s\n' "$target" >&2
  exit 1
fi

if [[ ! -r "$target" || ! -x "$target" ]]; then
  printf 'Cannot list the output folder.\n' >&2
  exit 1
fi

unset GLOBIGNORE
set +f
shopt -u failglob
shopt -s dotglob nullglob

items=( "$target"/* )
for item in "${items[@]}"; do
  if ! /bin/rm -R -- "$item"; then
    printf 'Clearing stopped; some items may remain.\n' >&2
    exit 1
  fi
done

remaining=( "$target"/* )
if (( ${#remaining[@]} != 0 )); then
  printf 'The folder still contains items.\n' >&2
  exit 1
fi

printf 'Folder is empty: %s\n' "$target"

ऐक्शन का सफल आउटपुट टेक्स्ट होता है: Folder is empty: से शुरू होने वाली एक पंक्ति। यह Folder ऑब्जेक्ट, हटाई गई फ़ाइलों की सूची या दोबारा इस्तेमाल की जा सकने वाली डायरेक्टरी का संदर्भ नहीं है। अगर आप बाद में शॉर्टकट को बढ़ाएँ, तो फ़ोल्डर की अपेक्षा करने वाले किसी भी ऐक्शन को गंतव्य फ़ोल्डर स्पष्ट रूप से दें। Apple का ऐक्शन जानकारी पैनल स्वीकार किए जाने वाले इनपुट और बनने वाले आउटपुट की पहचान करता है; ऐक्शन के आइकन पर Control-क्लिक करें और जानकारी देखने के लिए Show Info चुनें। ऐक्शन के इनपुट और आउटपुट की जानकारी देखें

पूरा होने का संदेश दिखाने के लिए, स्क्रिप्ट के बाद Show Alert जोड़ें और उसके संदेश में स्क्रिप्ट का आउटपुट वेरिएबल डालें। Apple निरीक्षण के लिए पिछले ऐक्शन का आउटपुट Show Alert में भेजने का विवरण देता है। फ़ोल्डर खाली होने का तय संदेश स्क्रिप्ट का वास्तविक नतीजा दिखाने से कम उपयोगी होगा। Mac पर शॉर्टकट में Show Alert ऐक्शन इस्तेमाल करें

समझें कि फ़ोल्डर क्यों बचा रहता है

असाइनमेंट items=( "$target"/* ) अंदर के पथ इकट्ठा करती है। लूप हर आइटम को अलग-अलग rm को देता है; वह कभी "$target" को खुद नहीं देता। इसलिए रिकर्सिव हटाना आउटपुट सबफ़ोल्डरों पर लागू होता है और दोबारा इस्तेमाल किया जा सकने वाला मूल फ़ोल्डर अपनी जगह बना रहता है।

Bash के दो विकल्प आम रीसेट समस्याओं को संभालते हैं। dotglob डॉट से शुरू होने वाले फ़ाइल नाम शामिल करता है, और nullglob से कोई पैटर्न मेल न खाने पर उसका विस्तार खाली हो जाता है। ऐरे का कोट किया हुआ विस्तार उन फ़ाइल नामों को, जिनमें स्पेस हैं, अलग-अलग आर्ग्युमेंट के रूप में सुरक्षित रखता है। इन व्यवहारों का विवरण Apple की वितरित Bash मैनुअल में है। Bash मैनुअल: पाथनेम एक्सपैंशन और ऐरे

हटाने का कमांड नेस्टेड फ़ोल्डरों के लिए -R और विकल्पों की व्याख्या रोकने के लिए -- इस्तेमाल करता है। यह हर कमांड के नतीजे की जाँच करता है और विफल होने पर रुक जाता है। Apple की rm मैनुअल बताती है कि त्रुटि होने पर नॉन-ज़ीरो एग्ज़िट स्टेटस मिलता है। हटाना कोई ट्रांज़ैक्शन नहीं है: बाद के आइटम पर विफलता होने से पहले हटाए गए आइटम वापस नहीं आते। Apple की rm मैनुअल

स्क्रिप्ट ऐसे लक्ष्य को भी अस्वीकार करती है जो सिंबॉलिक लिंक हो। इस उदाहरण का उपयोग एक सामान्य स्थानीय आउटपुट फ़ोल्डर के लिए करें, जिसके अंदर कोई माउंटेड वॉल्यूम न हो। खाली करने से पहले आउटपुट जनरेट करने वाली किसी भी प्रक्रिया को रोकें: रन के दौरान या बाद में बनाई गई फ़ाइलें फ़ोल्डर के खाली रहने की अपेक्षा को गलत साबित कर सकती हैं।

पहली बार चलाने और बार-बार चलाने की जाँच करें

एडिटर के रन बटन से शॉर्टकट चलाएँ। लक्ष्य पथ बदलने से पहले इस क्रम के अनुसार नतीजे की जाँच करें। Apple कस्टम शॉर्टकट को उसके एडिटर से टेस्ट करने का विवरण देता है। कस्टम शॉर्टकट टेस्ट करें

  1. Finder में पुष्टि करें कि Shortcut Output Demo अभी भी मौजूद है।
  2. पुष्टि करें कि उसके दिखाई देने वाले उदाहरण फ़ाइलें और Batch फ़ोल्डर हट गए हैं।
  3. पुष्टि करें कि स्क्रिप्ट ने फ़ोल्डर खाली होने का संदेश लौटाया है; उसकी आखिरी जाँच में छिपे हुए आइटम भी शामिल हैं।
  4. शॉर्टकट फिर चलाएँ। पहले से खाली फ़ोल्डर पर वही संदेश आना चाहिए।
  5. खाली डेमो फ़ोल्डर का नाम कुछ समय के लिए बदलें और फिर चलाएँ। स्क्रिप्ट को मौजूदा फ़ोल्डर वाली त्रुटि के साथ रुकना चाहिए। इसके बाद उसका नाम वापस रखें।

खाली करने वाली स्क्रिप्ट bash -n से Bash सिंटैक्स जाँच में सफल हुई। इस लेख के लिए इसे macOS Shortcuts में चलाया नहीं गया है, इसलिए हटाई जा सकने वाली पहली रन की प्रक्रिया सेटअप का हिस्सा बनी हुई है।

अगर हटाना विफल हो, तो दोबारा कोशिश करने से पहले बताई गई चीज़ और फ़ोल्डर की बची हुई सामग्री देखें। लक्ष्य का गायब होना, डायरेक्टरी को न पढ़ पाना और हटाने में विफलता अलग-अलग स्थितियाँ हैं; स्क्रिप्ट इन्हें सफलता के संदेश में नहीं बदलती।

टकराव संभालने की धारणा बनाए बिना फ़ोल्डर का दोबारा उपयोग करें

हटाई जा सकने वाली डेमो प्रक्रिया अपेक्षा के अनुसार काम करे, तो लक्ष्य की असाइनमेंट को अपने चुने हुए आउटपुट फ़ोल्डर पर बदलें। पहले उसकी सामग्री जाँचें और वही नियम बनाए रखें: अंदर की हर चीज़ बदली जा सकने वाली आउटपुट है, जिसमें छिपे हुए आइटम और सबफ़ोल्डर भी शामिल हैं।

फ़ोल्डर खाली करने से उस समय मौजूद नाम हट जाते हैं। इससे यह तय नहीं होता कि बाद में एक्सपोर्ट या सेव ऐक्शन के समय एक ही नाम वाले दो नए आउटपुट का क्या होगा। उस ऐक्शन के विकल्प और विवरण जाँचें; यह न मानें कि रीसेट करने से फ़ाइल बदल जाएगी, सामग्री मर्ज होगी या नाम अपने आप बदल जाएगा। Apple Show Info के ज़रिए ऐक्शन का विवरण देता है। ऐक्शन का व्यवहार देखें

आप नीचे दिए पूरे कमांड से Terminal में सेव किया हुआ शॉर्टकट भी चला सकते हैं। Apple स्पेस वाले शॉर्टकट नाम को कोट करने का विवरण देता है और बताता है कि shortcuts कमांड सफलता पर 0 और त्रुटि पर 1 लौटाता है। कमांड लाइन से शॉर्टकट चलाएँ

shortcuts run "Clear Demo Output"

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

स्रोत