tar
यह आपके लिए वास्तव में उपवास करेगा।
परीक्षा
पहले मैंने 2 निर्देशिका और 10 फाइलें बनाई:
% mkdir test1 test2 ; cd test1
% for n in `seq 1 10` ; do touch ABC.file$n ; done
% ls
> ABC.file1 ABC.file2 ABC.file4 ABC.file6 ABC.file8
> ABC.file10 ABC.file3 ABC.file5 ABC.file7 ABC.file9
फिर मैंने उन्हें कॉपी किया:
% tar -cf - ./* |\
tar -C../test2 --transform='s/ABC/DEF/' -xf -
% ls ../test2
> DEF.file1 DEF.file2 DEF.file4 DEF.file6 DEF.file8
> DEF.file10 DEF.file3 DEF.file5 DEF.file7 DEF.file9
बदलने
इसलिए GNU फ़ाइल का नाम बदलने के लिए tar
स्वीकार करेगा sed --transform=EXPRESSION
। यह भी केवल कुछ फ़ाइलों का नाम बदल सकता है। उदाहरण के लिए:
% tar -cf - ./* |\
tar -C../test2 --transform='s/ABC\(.*[0-5]\)/DEF\1/' -xf -
% ls ../test2
> ABC.file6 ABC.file8 DEF.file1 DEF.file2 DEF.file4
> ABC.file7 ABC.file9 DEF.file10 DEF.file3 DEF.file5
तो वह एक फायदा है।
धारा
यह भी विचार करें कि यह केवल दो tar
प्रक्रियाएं हैं - और यह आपकी फ़ाइल गणना की परवाह किए बिना नहीं बदलेगा।
tar | tar
tar
जैसा कि आप चाहते हैं कि यह अनुकूलित हो। इससे कभी भी समस्या का तर्क मायने नहीं रखता या बच्चे की प्रक्रिया नहीं हो सकती। यह सिर्फ A> B किया गया है।
ARGUMENTS
मैं tar
यहां अपनी दो प्रक्रियाओं के बीच संयुक्त 7 अलग-अलग तर्कों का उपयोग करता हूं । सबसे महत्वपूर्ण यहाँ पहले सूचीबद्ध है:
-
stdout / stdin - यह सूचित करता है tar
कि यह या तो इसके इनपुट या आउटपुट को स्ट्रीम कर रहा होगा या stdin/stdout
जिसमें से यह सही ढंग से व्याख्या करेगा कि यह आर्काइव का निर्माण कर रहा है या नहीं।
-c
create - यह tar
आर्काइव बनाने के लिए कहता है। अगले तर्क की tar
उम्मीद है ...
-f
फ़ाइल - हम निर्दिष्ट करते हैं कि टेप-डिवाइस या जो भी tar
हो, एक file
वस्तु के साथ काम करना होगा । और जैसा कि ऊपर उल्लेख किया गया है, वह फाइल stdin/stdout
- दूसरे शब्दों में, हमारी है |pipe
।
./*
सभी $ पीडब्ल्यूडी / फ़ाइलें - नहीं बहुत ज्यादा, सिवाय इसके कि संग्रह तर्क, पहले आता है इसलिए यहाँ की व्याख्या करने के -
तो ./*
।
... और दूसरी तरफ |pipe
...
-C
परिवर्तन निर्देशिका - यह बताती है tar
कि किसी भी अन्य क्रिया को करने से पहले मेरे द्वारा निर्दिष्ट निर्देशिका में इसे बदलना आवश्यक है, इसलिए cd ../test2
निष्कर्षण से ठीक पहले इसे प्रभावी ढंग से करें।
--transform='s/ed/EXPR/'
- जैसा कि पहले ही उल्लेख किया गया है, इसने नामकरण किया। लेकिन डॉक्स संकेत करता है कि यह कोई भी sed
अभिव्यक्ति ले सकता है या //flag
।
-x
एक्स्ट्रेक्ट - tar
हमारी टार्गेट डायरेक्टरी में बदलाव के बाद और हमारे रीनेमिंग निर्देशों को प्राप्त करने के बाद, हम इसे निर्देश देते हैं कि -f - |pipe
आर्काइव फाइल से इसकी वर्तमान डाइरेक्टरी में सभी फाइलों को निकालना शुरू करें । कोई रहस्य नहीं।
mc
इस तरह के बड़े पैमाने पर नाम बदलने के लिए एक सम्मानित फ़ाइल प्रबंधक का सबसे व्यापक समर्थन है।