लिनक्स शेल कमांड दो निर्देशिकाओं की तुलना करता है और ड्यूप्स को हटाता है


0

मैं जिस ऐप को विकसित कर रहा हूं, उसके एक भाग के रूप में, मुझे निर्देशिका ए में किसी भी फाइल को हटाने की आवश्यकता है जो पहले से ही निर्देशिका बी में हैं। मैंने rsync के बारे में सोचा लेकिन मैं इसे स्रोत से गंतव्य तक गायब फ़ाइलों की प्रतिलिपि बनाने से नहीं रोक सकता।

मैं जो खोज रहा हूं उसका एक उदाहरण

अर्थात।

    /dir1/apple
    /dir1/orange
    /dir1/banana 

तथा

    /dir2/orange    

कमांड के बाद, मेरे पास होगा:

    /dir1/apple
    /dir1/banana 

तथा

    /dir2/orange  

जवाबों:


1

निर्देशिका 2 में प्रत्येक फ़ाइल पर लूप और समान फ़ाइल नाम के साथ समान निकालने का प्रयास करें ( basename ) निर्देशिका में 1।

for f in dir2/*; do echo rm -f -- dir1/"$(basename "$f")"; done

ध्यान दें कि rm -f उन फ़ाइलों पर त्रुटि नहीं है जो नहीं मिली हैं। हटाए echo जब आप सुनिश्चित हों कि यह सही चीजों को हटा देगा।

अगर आप केवल कॉल करना चाहते हैं rm मौजूदा फ़ाइलों पर, परीक्षण करें कि क्या वे अंदर हैं dir1 साथ में [[ -f … ]]

for f in dir2/*; do del=dir1/"$(basename "$f")"; [[ -f "$del" ]] && rm -- "$del"; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.