tar
sẽ làm điều này cho bạn thực sự nhanh chóng.
KIỂM TRA
Đầu tiên tôi tạo 2 thư mục và 10 tệp:
% 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
Sau đó, tôi đã sao chép chúng:
% 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
BIẾN ĐỔI
Vì vậy, GNU tar
sẽ chấp nhận sed --transform=EXPRESSION
đổi tên tập tin. Điều này thậm chí có thể đổi tên chỉ một số các tập tin. Ví dụ:
% 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
Vì vậy, đó là một lợi thế.
SUỐI
Cũng xem xét rằng đây chỉ là hai tar
quy trình - và điều đó sẽ không thay đổi bất kể số lượng tệp của bạn.
tar | tar
tar
được tối ưu hóa như bạn có thể muốn nó được. Điều này sẽ không bao giờ có số lượng đối số vấn đề hoặc các tiến trình con chạy trốn. Đây chỉ là A> B được thực hiện.
LẬP LUẬN
Tôi sử dụng 7 đối số riêng biệt kết hợp giữa hai tar
quá trình của tôi ở đây. Điều quan trọng nhất được liệt kê ở đây đầu tiên:
-
stdout / stdin - điều này thông báo tar
rằng nó sẽ truyền trực tiếp đầu vào hoặc đầu ra của nó đến hoặc từ stdin/stdout
đó nó sẽ diễn giải chính xác tùy thuộc vào việc nó có đang xây dựng hoặc trích xuất một kho lưu trữ hay không.
-c
tạo - điều này nói tar
để xây dựng kho lưu trữ. Đối số tiếp theo tar
mong đợi là ...
-f
tệp - chúng tôi xác định rằng tar
sẽ làm việc với một file
đối tượng chứ không phải là thiết bị băng hoặc bất cứ thứ gì. Và tập tin mà nó sẽ làm việc với, như đã lưu ý ở trên, là stdin/stdout
- nói cách khác, của chúng tôi |pipe
.
./*
tất cả $ PWD / tệp - không quá nhiều để giải thích ở đây ngoại trừ đối số lưu trữ đến trước, vì vậy -
sau đó ./*
.
... và ở phía bên kia của |pipe
...
-C
thay đổi thư mục - điều này thông báo tar
rằng nó cần thay đổi thành thư mục tôi chỉ định trước khi thực hiện bất kỳ hành động nào khác, vì vậy nó có hiệu quả ngay cd ../test2
trước khi giải nén.
--transform='s/ed/EXPR/'
- như đã được đề cập, điều này đã đổi tên. Nhưng các tài liệu chỉ ra rằng nó có thể có bất kỳ sed
biểu thức hay //flag
.
-x
trích xuất - sau khi tar
thay đổi thư mục đích của chúng tôi và nhận được hướng dẫn đổi tên của chúng tôi, chúng tôi hướng dẫn nó bắt đầu trích xuất tất cả các tệp vào thư mục hiện tại của nó từ -f - |pipe
tệp lưu trữ. Không có bí ẩn.
mc
trình quản lý tệp đáng kính có sự hỗ trợ rộng rãi nhất cho loại đổi tên hàng loạt này.