कई उपनिर्देशिकाओं से संबंधित फ़ाइलें


5

कहो कि मेरे पास एक निर्देशिका संरचना है जो इस तरह दिखती है:

file1.txt
folder1/
    file2.txt
folder2/
    file3.txt

मैं एक फ़ाइल में file1.txt, file2.txt और file3.txt को कैसे सम्‍मिलित कर सकता हूं?

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

जवाबों:


8
cat file1.txt folder1/file2.txt folder2/file3.txt > single.txt

+1 इससे अधिक तेज़ मुझे मिल सकता है
Maqleod

2
शायद मैं स्पष्ट नहीं था। मेरा मतलब यह नहीं है कि मैं इन तीन फाइलों को समाप्‍त करना चाहता हूं। वह निर्देशिका संरचना सिर्फ एक सरल उदाहरण था। कल्पना कीजिए कि मेरे पास 50 सबफ़ोल्डर हैं और उनमें से प्रत्येक में 10 सबफ़ोल्डर हैं। उन सटीक स्थानों को जाने बिना मैं उन सबफ़ोल्डरों की सभी फाइलों को कैसे सुरक्षित रखूंगा?
जो मोरिन

4

हम किस ओएस के बारे में बात कर रहे हैं?

विंडोज को मानते हुए, निम्न आदेशों का उपयोग करें (फ़ाइल / फ़ोल्डरनाम आवश्यक रूप से प्रतिस्थापित करते हुए):

C:\> ren > TARGET.TXT 2> nul
C:\> cd MyFolder
C:\MyFolder> for /R %i in (*) do copy /b \TARGET.TXT + "%i" \TARGET.TXT

पहली पंक्ति C:\TARGET.TXTनिर्मित कमांड का उपयोग करके फ़ाइल बनाती है (या मिटा देती है) । तीसरी कमांड वर्तमान निर्देशिका और उसकी उपनिर्देशिकाओं में प्रत्येक फ़ाइल के माध्यम से पुन: आ जाती है और उन्हें लक्ष्य फ़ाइल में जोड़ देती है (ध्यान दें, इसमें छिपी हुई फाइलें शामिल नहीं होंगी)। यह /bद्विआधारी प्रारूप में उन्हें कॉपी करने के लिए स्विच का उपयोग करता है, अगर कुछ फाइलें बिल्कुल सादे-पाठ नहीं हैं।


3

copy /y file1.txt+folder1\file2.txt+folder2\file.txt destination.txt चाल चलनी चाहिए

FYI करने से /yप्रॉब्लम होती है


3

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

find . -type f -exec cat {} ; | cat > bigfile.txt

जब Ubuntu 10.10 और बैश शेल का उपयोग करते हुए मैंने पाया कि निम्नलिखित सिंटैक्स ने दोनों में बेहतर काम किया है, क्योंकि यह खोज पथ में बनाया गया है तो "पाया" "bigfile.txt" है और क्योंकि कमांड के कुछ हिस्सों को बचाना आवश्यक है। इस और विंडोज पोर्ट के बीच अंतर को ध्यान दें कि कोष्ठक के चारों ओर सिंगल कोट्स हैं, सेमी-कोलोन से पहले एक बैकस्लैश और कंटेनर फाइल को एक डायरेक्टरी बनाते हैं।

find . -type f -exec cat '{}' \; | cat > ../bigfile.txt

यह मुझे एक सिंटैक्स त्रुटि देता है: -बैश: अप्रत्याशित टोकन के पास सिंटैक्स त्रुटि `|
जो मॉरन

मुझे लगा कि मैंने इसे टाइप किया है, लेकिन दो कंप्यूटर कमरे के अलग-अलग हिस्सों में थे इसलिए मैं अपने सिर में संपादन कर रहा था और यह भूल गया कि मैंने क्या किया है। ऊपर नया संपादित संस्करण सिर्फ उबंटू 10.10, बिल्ली संस्करण 8.5 पर काम किया और 4.4.2 संस्करण खोजा। मिक्स-अप के लिए क्षमा करें।
डेनिस

मुझे यह भी एहसास हुआ कि आप -mindepth 2 (-type से पहले) का उपयोग कर सकते हैं और यह खोज में bigfile.txt नहीं मिलेगा, लेकिन संभवतः शीर्ष स्तर निर्देशिका में अन्य फ़ाइलों को भी याद करेगा। सकारात्मक नहीं क्योंकि यह काम किया था, लेकिन मैं वास्तव में माइंडथ से परिचित नहीं हूं
डेनिस

2

मैं मैक ओएस एक्स पर काम करने के लिए निम्नलिखित प्राप्त करने में सक्षम था:

find . -type f -exec cat {} > ../results.txt \;

हालांकि, मुझे पूरी तरह से समझ में नहीं आता है कि यह क्यों काम करता है, इसलिए यह उपयोगी होगा यदि कोई समझा सकता है।


1
findवर्तमान निर्देशिका में ( .) type file और execute के साथ सभी फाइलें cat [current filename]catफ़ाइल सामग्री को मानक आउटपुट पर भेजें, जिसे पुनर्निर्देशित किया गया है ../results.txt। अंत में, विकल्प \;बंद कर देता है -exec। यह अधिक तर्कसंगत > ../results.txtहोगा यदि पीछे रखा जाएगा \;, शेल ../results.txtफ़ाइल पर पुनर्निर्देशन करता है , नहीं find। आप इस बात की पुष्टि कर सकते हैं कि set -xबैश शेल में चलने से पहले (यह आपके शेल के लिए भी काम कर सकता है)
Lekensteyn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.