मैं सिर्फ एक संग्रह को अनसुना कर दूंगा जिसने मेरी सुव्यवस्थित निर्देशिका में फ़ाइलों की गड़बड़ी पैदा की। उदाहरण के लिए:
user@comp:~/tidy$ tar xvf myarchive.tar
file1
file2
dir1/
dir1/file1
dir1/subdir1/
dir1/subdir1/file1
dir2/
dir2/file1
...
मैं उम्मीद कर रहा था कि टार फ़ाइल एक एकल फ़ोल्डर (यानी myarchive/
) में आयोजित की गई होगी , लेकिन यह नहीं थी! अब मेरे पास कुछ 190 फाइलें और निर्देशिकाएं हैं जो एक संगठित निर्देशिका थी जो डिजिटल रूप से बारफेड है। इन अनट्रेड फ़ाइलों को साफ़ करने की आवश्यकता है।
क्या इसे "पूर्ववत" करने और इस संग्रह से निकाले गए फ़ाइलों और निर्देशिकाओं को हटाने का कोई तरीका है?
नीचे दिए गए उत्कृष्ट उत्तरों के लिए धन्यवाद। सारांश में , यहाँ दो चरणों के साथ काम करता है (1) फ़ाइलें हटाएँ, और (2) खाली निर्देशिका संरचना को रिवर्स पैकिंग ऑर्डर में हटाएं (बाहरी निर्देशिकाओं को पहले हटाने के लिए):
tar tf myarchive.tar | xargs -d'\n' rm
tar tf myarchive.tar | tac | xargs -d'\n' rmdir
और अभी तक सुरक्षित, के echo
बाद से जोड़कर आदेशों की एक सूखी चलाने का पूर्वावलोकन करने के लिए xargs
।
xargs
( और tac
इसके बजाय sort -r
सिर्फ सौंदर्य प्रसाधन हैं), लेकिन आप प्रक्रिया प्रतिस्थापन के साथ उत्तर स्वीकार करते हैं, जैसा कि आपने टिप्पणियों में समझाया था, क्या आप फिट नहीं हुए? इसके अलावा, xargs -d'\n'
यदि आप भविष्य के उपयोगकर्ताओं के लिए संक्षेप में प्रस्तुत करना चाहते हैं , तो कृपया अपनी पोस्ट में स्विच दें , ताकि वे फ़ाइल नामों में रिक्त स्थान से काट न लें।
-d'\n'
अब तक की आवश्यकता को कभी नहीं समझा , और आगे के विश्लेषण पर आपका जवाब वास्तव में मेरे द्वारा उपयोग किए जाने के करीब है।
-d'\n'
तथ्य में झूठ की आवश्यकता है कि यदि आप xargs
नई लाइनों (जो आप खिला रहे हैं) पर तर्कों को विभाजित करने के लिए नहीं कहते हैं , लेकिन रिक्त स्थान पर, तो एक फ़ाइल के साथ नाम folder1/some file
के रूप में पढ़ा जाएगा folder1/some
और name
।