मैं इसका उपयोग करके cwd में सभी फ़ोल्डरों के टाइमस्टैम्प को अपडेट करने की कोशिश कर रहा हूं:
for file in `ls`; do touch $file; done
लेकिन यह काम नहीं करता है। कोई विचार क्यों?
मैं इसका उपयोग करके cwd में सभी फ़ोल्डरों के टाइमस्टैम्प को अपडेट करने की कोशिश कर रहा हूं:
for file in `ls`; do touch $file; done
लेकिन यह काम नहीं करता है। कोई विचार क्यों?
जवाबों:
अब तक के सभी उत्तरों (साथ ही प्रश्न में आपके उदाहरण) मान लेते हैं कि आप touchनिर्देशिका में सब कुछ चाहते हैं , भले ही आपने "सभी फ़ोल्डर्स को स्पर्श करें" कहा हो। यदि यह पता चला है कि निर्देशिका में फ़ाइलें और फ़ोल्डर हैं और आप केवल फ़ोल्डर्स को अपडेट करना चाहते हैं, तो आप उपयोग कर सकते हैं find:
$ find . -maxdepth 1 -mindepth 1 -type d -exec touch {} +
या यदि आपका findकार्यान्वयन गैर-मानक -mindepth/ -maxdepthविधेय का समर्थन नहीं करता है:
$ find . ! -name . -prune -type d -exec touch {} +
इस:
$ touch -c -- */
को छोड़कर अधिकांश गोले में काम करना चाहिए:
touch निर्देशिकाओं के लिए भी सहानुभूति रखेगा*अलावा अन्य गोले में csh, tcsh, zsh, fishया थॉम्पसन खोल (जो एक त्रुटि के बजाय रिपोर्ट करेंगे)। यहां, हम -cइसके चारों ओर काम करने के लिए उपयोग कर रहे हैं , हालांकि यह अभी भी touchएक गैर-निर्देशिका फ़ाइल कहला सकती है *।केवल zshउन touchनिर्देशिकाओं के साथ , जिनमें छिपे हुए हैं:
touch -- *(D/)
{} \+खास है findवाक्य रचना - अधिक के लिए आदमी पृष्ठ पढ़ें। मुझे लगता है कि touch -c ./*/यह भी काम करेगा।
-maxdepth 1कमांड में शामिल होना चाहिए , ताकि findसबफ़ोल्डर्स में पुनरावृत्ति न हो। ओपी सीवीडी में केवल उन फ़ोल्डरों को छूना चाहता है, न कि सबफ़ोल्डर्स।
प्रयत्न
touch ./*
यह अनावश्यक forलूप से बचता है जो हर एक फ़ाइल के लिए एक नई प्रक्रिया को जन्म देता है और सभी फ़ाइल नामों के लिए काम करता है, यहां तक कि रिक्त स्थान वाले या विकल्प की तरह दिखने वाले भी -t। केवल उसी समय यह काम नहीं करेगा जब आपके पास निर्देशिका में ऐसी कोई फ़ाइल (नॉन-डॉट) न हो, जिस स्थिति में आप नाम की फ़ाइल बनाना समाप्त करेंगे *। इससे बचने के लिए, touchअधिकांश कार्यान्वयन के विशिष्ट मामले के लिए एक -cविकल्प है ( --no-createजीएनयू संस्करणों में भी कहा जाता है), कोई भी फ़ाइलों को न बनाने के लिए, अर्थात
touch -c ./*
भी अच्छा संदर्भ देखें jasonwryan के जवाब के साथ ही इस एक ।
आपको आउटपुट को पार्स करने का प्रयास नहीं करना चाहिएls ।
इसके अलावा, आपको "$file"किसी भी व्हाट्सएप पर कब्जा करने के लिए अपना उद्धरण देना चाहिए । Http://www.grymoire.com/Unix/Quote.html देखें
कुछ इस तरह से प्राप्त कर सकते हैं कि आप क्या कर रहे हैं:
for file in *; do touch "$file"; done
अधिक गहन स्पष्टीकरण के लिए पहले दो बैश नुकसान देखें ।
*फ़ाइलों और निर्देशिकाओं को कैप्चर नहीं करता है जिनका नाम डॉट से शुरू होता है। इसे ठीक करने का एक तरीका dotglobशेल विकल्प के माध्यम से सक्षम करना है shopt -s dotglob।