bash - सभी XML फ़ाइलों को एक निर्देशिका में स्वरूपित करें और उन्हें एक उपनिर्देशिका में सहेजें



find xargs (1)

मैं एक लिपि लिखने की कोशिश कर रहा हूं जो एक निर्देशिका के माध्यम से देखेंगे, सभी एक्सएमएल फाइलों को खोज लें, उन्हें xmllint से चलाएं, और फ़ॉर्मेट किए गए एक उप-डायरेक्टरी में उसी नाम की फाइल में स्वरूपित परिणाम सहेजें। यहाँ तक की स्क्रिप्ट मेरे पास है:

find . -maxdepth 1 -type f -iname "*.xml" | xargs -I '{}' xmllint --format '{}' > formatted/'{}'

यह एक हद तक काम करता है उपनिर्देशिका एक फ़ाइल के साथ समाप्त होती है, जिसका नाम "{}" , जो कि अंतिम फाइल का सिर्फ परिणाम है जिसे xmllint माध्यम से संसाधित किया गया था। मैं उप-निर्देशिका में ठीक से लिखने के लिए फाइल कैसे प्राप्त करूं?


{} नाम वाली फ़ाइल में संभवतः सभी स्वरूपित फ़ाइलों को एक साथ शामिल करना चाहिए। इसका कारण यह है कि आप जो रीडायरेक्शन उपयोग कर रहे हैं वह वास्तव में कमांड का एक हिस्सा नहीं है जो xargs देखता है। पुनर्निर्देशन को शेल द्वारा परिभाषित किया जाता है, इसलिए जो चल रहा है वह है

find . -maxdepth 1 -type f -iname "*.xml" | xargs -I '{}' xmllint --format '{}'

और आउटपुट को फ़ाइल formatted/{} नाम की फाइल में सहेजें।

पुनर्निर्देशन के बजाय xmllint के --output विकल्प का उपयोग करने की कोशिश करें:

... | xargs -I '{}' xmllint --format '{}' --output formatted/'{}'

आप खोज के -exec विकल्प का उपयोग करके xargs कॉल से बच सकते find :

find . -maxdepth 1 -type f -iname "*.xml" -exec xmllint --format '{}' --output formatted/'{}' \;




xmllint