Sao chép và dán một loạt các tệp với tên khác nhau


10

Tôi có một loạt các tập tin văn bản với tên

foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
...
...
foo_bar_abc_1_1000_geh_original.in

Tôi muốn sao chép (và giữ các tệp gốc) mỗi tệp và dán vào các tên khác nhau (trong cùng một thư mục) như,

foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_03_geh_copy.in
...
...
foo_bar_abc_1_1000_geh_copy.in

Làm thế nào tôi có thể làm điều này bằng cách sử dụng một kịch bản đơn giản?

Câu trả lời:


13

Thay đổi thư mục đến nơi bạn có các tập tin gốc.

Sau đó kiểm tra với dòng lệnh sau,

for i in *_original.*;do echo cp -p "$i" "${i/_original./_copy.}";done

và nếu nó trông tốt, hãy loại bỏ echovà thực hiện sao chép,

for i in *_original.*;do cp -p "$i" "${i/_original./_copy.}";done

8

Bạn có thể sử dụng mcptừ mmvgóiCài đặt mmv theo cách sau:

mcp "*original*" "#1copy#2"

Điều này sẽ sao chép mọi tập tin có chứa chuỗi gốc bản gốc trong thư mục hiện tại và thay thế chuỗi này bằng bản sao chép bản sao. Bạn có thể kiểm tra những gì mcpsẽ làm bằng cách thêm -ncờ, tuy nhiên nó sẽ không âm thầm ghi đè lên các tệp, nhưng hỏi bạn. Việc sử dụng mmvcó lợi thế hơn cplà bạn không phải gọi nó cho mỗi tệp duy nhất - với một nghìn tệp như bạn dường như sao chép, điều đó tạo ra sự khác biệt.

Bạn cũng có thể sử dụng GNUparallel Cài đặt song song theo cách sau ( --dry-runđể kiểm tra, xóa nó để thực hiện sao chép):

parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *

hoặc, nếu điều đó làm cho danh sách đối số trên danh sách lỗi quá dài:

printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"

Chạy ví dụ

$ ls -1
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_original.in
$ mcp "*original*" "#1copy#2"
$ ls -1
foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_copy.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_copy.in
foo_bar_abc_1_04_geh_original.in

Hãy để timenó, chạy hơn 1000 tệp 100 KiB trên mỗi máy chậm :

$ time mcp "*original*" "#1copy#2"
real    0m1.114s
user    0m0.000s
sys     0m0.132s
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.