अद्वितीय नामों के साथ कई निर्देशिकाओं में अपने मूल फ़ोल्डर में दो विशिष्ट फ़ाइलों को ले जाना


2

मुझे दो विशिष्ट फ़ाइलों को स्थानांतरित करने की आवश्यकता है, हम उन्हें अपने मूल फ़ोल्डर में fileA.txt और fileB.sh कहेंगे।

इन फ़ाइलों में से एक सामान्य है, लेकिन दूसरी फ़ाइल उसके मूल फ़ोल्डर के लिए विशिष्ट है और सभी फ़ोल्डरों में कॉपी नहीं की जा सकती है।

फ़ोल्डर पदानुक्रम इस तरह है: फ़ोल्डर पदानुक्रम

मूल फ़ोल्डर अद्वितीय है और उसे एक ही रहना है। कुल २००० से अधिक फोल्डर हैं, जो २००-३०० अभिभावकों के उप-फ़ोल्डर में स्थित हैं, जिनमें बाल फ़ोल्डर हैं

मेरे पास अभी तक जो BASH में काम नहीं कर रहा है वह है:

find -maxdepth 4 -type f -name ‘*.bb’ ‘*.txt’; mv ../.

मैं स्क्रिप्टिंग में बहुत नया हूं और मुझे पता है कि यह एक बहुत ही सरल काम है। मैं भयानक ड्राइंग के लिए माफी माँगता हूँ, लेकिन मैंने अपना सिर दीवार पर बहुत देर तक मारा है।

जवाबों:


3

नामित किसी भी फ़ाइल को स्थानांतरित करने के लिए fileA.txt या fileB.txt इसकी तत्काल मूल निर्देशिका के लिए:

find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;

या, नाम की किसी भी फ़ाइल को स्थानांतरित करने के लिए fileA.txt या fileB.bb इसकी तत्काल मूल निर्देशिका के लिए:

find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;

यह काम किस प्रकार करता है

  • . बताता है find वर्तमान निर्देशिका के साथ शुरू करने के लिए। (आप इसे अपनी पसंद की किसी भी निर्देशिका से बदल सकते हैं

  • -maxdepth 4 बताता है find निर्देशिका संरचना में गहरे चार से अधिक स्तर नहीं उतरते।

  • -type f बताता है find केवल नियमित फ़ाइलों को देखने के लिए।

  • -name 'file[AB].txt' बताता है find ग्लोब से मेल खाने वाली फ़ाइलों के लिए ही देखें file[AB].txt

    वैकल्पिक रूप से, या तो मिलान करने के लिए fileA.txt या fileB.bb, हम दो का उपयोग करते हैं -name तार्किक-या के साथ संयुक्त परीक्षण -o ) और parens के साथ एक साथ समूहीकृत:

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
    
  • -execdir mv {} ../ \; बताता है find फ़ाइल की निर्देशिका के लिए chdir और शेल कमांड चलाएं mv {} ../ कहा पे find बदल देगें {} फ़ाइल के वास्तविक नाम के साथ। भाव ../ मूल निर्देशिका के लिए यूनिक्स-स्पीक है। अनुगामी \; के लिए केवल निशान find शेल कमांड का अंत


क्या एक अविश्वसनीय रूप से अच्छी तरह से समझाया जवाब! मुझे एक वैकल्पिक वैकल्पिक हल का पता चला है जो मोटे तौर पर काम नहीं करता है, लेकिन मैं कुछ परीक्षण फ़ोल्डर्स सेट करने जा रहा हूं और फिर से कोशिश करता हूं ताकि मैं इससे सीख सकूं। आपको बहुत - बहुत धन्यवाद!
J.Mike

इसके अलावा, अगर मैं फ़ाइलों को हटाने के बाद बच्चे के फ़ोल्डर को निकालना चाहता था, तो क्या मैं सिर्फ एक जोड़ूंगा अंत में या कि नई मूल निर्देशिका को हटा देंगे?
J.Mike

1
@ जे.माइक जबकि लिखित धन्यवाद अच्छा है और संभावना है कि उत्तरदाता द्वारा सराहना की जाती है, एक व्यक्ति की मदद के लिए आभार प्रदर्शित करने का एक शानदार तरीका है कि उनके उत्तर को स्वीकार किए गए के रूप में चुनें (यदि, ज़ाहिर है, आपको लगता है कि यह इसके योग्य है)। यहाँ पर एक उपयोगी गाइड है जब कोई आपके प्रश्न का उत्तर देता है तो क्या करें
CJK
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.