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เสร็จแล้ว
อาร์กิวเมนต์
ฉันใช้ข้อโต้แย้งที่แตกต่างกัน 7 ข้อระหว่างทั้งสองtarกระบวนการของฉันที่นี่ สิ่งที่สำคัญที่สุดมีอยู่ที่นี่ก่อน:
  -stdout / stdin - สิ่งนี้แจ้งtarว่ามันจะสตรีมไม่ว่าจะเป็นอินพุทหรือเอาท์พุทไปยังหรือจากการstdin/stdoutที่มันจะตีความอย่างถูกต้องขึ้นอยู่กับว่ามันกำลังสร้างหรือแยกไฟล์เก็บถาวร
  
  -cสร้าง - สิ่งนี้บอกtarให้สร้างการเก็บถาวร อาร์กิวเมนต์ถัดไปที่tarคาดหวังคือ ...
  
  -fไฟล์ - เราระบุว่าtarจะทำงานกับfileวัตถุมากกว่าอุปกรณ์เทปหรืออะไรก็ตาม และไฟล์ที่จะทำงานร่วมกับตามที่ระบุไว้ข้างต้นคือstdin/stdout- ในคำอื่น ๆ |pipeของเรา
  
  ./*ทั้งหมด $ PWD / ไฟล์ - ไม่มากเกินไปที่จะอธิบายที่นี่ยกเว้นว่าอาร์กิวเมนต์เก็บมาก่อนดังนั้นแล้ว-./*
... และอีกด้านหนึ่งของ|pipe...
  -Cchange directory - สิ่งนี้แจ้งtarว่าจำเป็นต้องเปลี่ยนเป็นไดเร็กทอรีที่ฉันระบุก่อนทำการดำเนินการอื่นใดดังนั้นจึงควรแก้ไขcd ../test2ก่อนที่จะทำการแตกไฟล์
  
  --transform='s/ed/EXPR/'- ดังที่ได้กล่าวไปแล้วการเปลี่ยนชื่อทำได้ แต่เอกสารระบุว่าสามารถใช้ใด ๆแสดงออกหรือsed//flag
  
  -xแยก - หลังจากtarการเปลี่ยนแปลงไปยังไดเรกทอรีเป้าหมายของเราและรับคำแนะนำในการเปลี่ยนชื่อของเราเราแนะนำให้เริ่มแตกไฟล์ทั้งหมดลงในไดเรกทอรีปัจจุบันจาก-f - |pipeไฟล์เก็บถาวร ไม่มีความลึกลับ
               
              
mcจัดการไฟล์ที่น่าเคารพมีการสนับสนุนที่ครอบคลุมมากที่สุดสำหรับการเปลี่ยนชื่อจำนวนมาก