लिनक्स और एसवीएन: सभी संस्करण वाली फ़ाइलों को कैसे हटाएं लेकिन केईईपी निर्देशिका संरचना को अनदेखा करें। एसओएस डायर?


9

मैं अपनी रिपॉजिटरी से सभी संस्करणित फ़ाइलों को हटाना चाहता हूं, लेकिन संस्करण निर्देशिका संरचना को KEEP करता हूं। जाहिर है मैं सभी .svn निर्देशिकाओं को अछूता छोड़ना चाहता हूं।

दूसरे शब्दों में, मैं निर्देशिका संरचना को नुकसान पहुंचाने के बिना एक काम की प्रतिलिपि निर्देशिका संरचना को पूरी तरह से खाली करना चाहता हूं।

उदाहरण के लिए, इस संरचना की फ़ाइलों को हटाना:

dir/
    .svn/
        [files]
    svsubdir1/
        file1
        .svn/
            [files]
    subdir2/
        file2
        file3
        file4
        .svn/
            [files]
        subsubdir1/
            file5
            .svn/
                [files]

परिणाम में होना चाहिए:

dir/
    .svn/
        [files]
    svsubdir1/
        .svn/
            [files]
    subdir2/
        .svn/
            [files]
        subsubdir1/
            .svn/
                [files]

मैं इसे findपूरा करने के लिए किसी प्रकार की कमांड या किसी चीज़ की तलाश कर रहा हूं, और मुझे कमांड बनाने में परेशानी हो रही है। सहायता के लिए धन्यवाद!


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

1
यह ध्यान देने योग्य है कि संस्करण 1.7 (अक्टूबर 2011) के बाद से एसवीएन के पास अब कई "। एसवीएन" निर्देशिका नहीं हैं, लेकिन शीर्ष स्तर पर सिर्फ एक। एसवीवीएन डायर है। देखें subversion.apache.org/docs/release-notes/1.7.html#wc-ng
रिच

जवाबों:


10
find dir/ -path '*/.svn' -prune -o -type f -print

बिल फिट होना चाहिए (ज्यादातर के लिए खोज मैनपेज से आता है -path)। इसे कम पाइप करें और इसे जांचें। यह जो करता है वह सबसे पहले पाया जाता है (पथ समाप्त होता है .svn और इस निर्देशिका में पुनरावृत्ति नहीं करें) या (यदि यह एक फ़ाइल है, तो इसे प्रिंट करें)।

यदि यह अच्छा लगता है, तो इसे बदल दें

find dir/ -path '*/.svn' -prune -o -type f -exec rm {} +

+ संस्करण सभी फाइलों को एक साथ एक rm कमांड में चिपका देता है। यदि आप पागल हैं, तो cp -a dir/ otherdir/पहले पेड़ का बैकअप रखें ।


सही समाधान, बस यही मुझे चाहिए था! धन्यवाद Derf!
ब्रायन लेसी

'-Exec rm {} +' के स्थान पर आप अधिक सहज '-डेलीट' विकल्प का भी उपयोग कर सकते हैं।
टिम बिलावा

1
@ टाइम मैनपेज के अनुसार, -deleteगहराई-पहले है और इसलिए इससे टकराव होता है -pruneक्योंकि फ़ोल्डर के अंदर की फाइलों की जांच फ़ोल्डर से पहले ही हो जाएगी। अन्य समाधान ( -not -path ...बजाय -path ... -pruneउपयोग-विकल्प का उपयोग कर सकते हैं।
DerfK

अच्छा पकड़ा!
टिम बिलावा

मैंने कई वर्षों में इस ट्रिक (या इसी तरह) का कई बार उपयोग किया है। तो फिर से धन्यवाद, @DerfK। :)
ब्रायन लैसी

2
खोजो। -नोट -पैथ "* / /। svn / *" -type f -and -exec / bin / rm '{}' ';

चाल चलनी चाहिए।


बस एक टिप, लेकिन -exec /bin/rm '{}'आप के बजाय उपयोग कर सकते हैं -delete
आरोन कोपले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.