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