Làm thế nào để sao chép một tập tin nhất định nhiều lần với một kết thúc thông thường?


13

Tôi có một tệp duy nhất (PDF) và tôi muốn có nhiều bản sao giống hệt nhau trong cùng một thư mục (200 sẽ rất hay) có tên file-001, file-002v.v.

Tôi phải làm nó như thế nào?


Không, nó là để sửa lỗi.
Tim

_ Là một lỗi đánh máy tôi hy vọng?
Rinzwind

@Rinzwind yeah! Điều đó có thể thú vị - chọn một nhân vật ngẫu nhiên cho mỗi? : p
Tim

@Tim: Chà, để tạo ra một "_" hoặc "-" ngẫu nhiên, bạn có thể printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P (và được cảnh báo rằng đó là một con giun, vì echo -là một trong những trường hợp góc này ...)
Rmano

1
@Rmano Tôi sẽ gắn bó với -tôi nghĩ: P
Tim

Câu trả lời:


22

Bạn có thể làm một cái gì đó như

< file tee file-{001..200}

tuy nhiên nếu phương tiện trở nên không thể đọc được thì sẽ không có vấn đề gì về việc có bao nhiêu bản sao trên đó - các bản sao lưu cơ bản đòi hỏi sự đa dạng .

Lưu ý rằng teeghi đầu vào tiêu chuẩn của nó vào đầu ra tiêu chuẩn cũng như cho từng tệp đã cho - đối với các tệp lớn hoặc đối với các tệp chứa dữ liệu nhị phân hoặc các ký tự đặc biệt khác có thể can thiệp vào cài đặt đầu cuối của bạn, có thể bạn sẽ muốn chuyển đầu ra tiêu chuẩn sang thùng bit

< file > /dev/null tee file-{001..200}

4
tee file-{001..200} < file >/dev/nulltìm tôi rõ ràng hơn Xem câu trả lời gần như trùng lặp này: Làm thế nào để sao chép một tệp vào nhiều thư mục trong Terminal?
Radu Rădeanu

21

Đây là trường hợp cổ điển mà thủ thuật shell giúp rất nhiều.

for i in {000..199}; do cp file file-$i; done

tôi biết đó là một trò đùa , nhưng nếu bạn muốn ngẫu nhiên _hoặc -tách số từ tên bạn có thể sử dụng:

for i in {000..199}; do 
    cp file file$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )$i; 
done

(nhiều dòng để giúp dễ đọc ...)

:-P


1
Điều gì sẽ xảy ra nếu tôi muốn mọi số nguyên tố là một _và mọi số nguyên tố không tồn tại -? 1 không phải là số nguyên tố và bạn chọn 0! : Truyện cười P!
Tim

7

Để tạo một bản sao duy nhất của một tệp bạn có thể biết rằng bạn có thể sử dụng cp:

cp file file-001

Bây giờ, để tạo nhiều bản sao hơn cho một tệp, bạn có thể kết hợp cpvới xargs. Trong trường hợp của bạn:

echo file-{001..200} | xargs -n 1 cp file

sẽ sao chép fileđể file-001, file-002, ..., file-200. Xem man xargsđể biết thêm.


4

Như mọi khi, xe tải trăn đến muộn, nhưng:

làm cho nó thực thi được, kéo nó qua cửa sổ terminal, kéo tập tin để sao chép qua cửa sổ terminal và đặt số lượng bản sao:

script file number_ofcopies

Số điểm không hàng đầu được thiết lập tự động, các tập tin được đặt tên file_001.pdf, file_002.pdfvới filenumbers đặt trước phần mở rộng.

Kịch bản:

#!/usr/bin/env python3

import sys
import shutil

orig = sys.argv[1]; n = sys.argv[2]; size = len(str(n)); out = (orig[:orig.rfind(".")], orig[orig.rfind("."):])
for item in [out[0]+"_"+(size-len(str(item)))*"0"+str(item)+out[1] for item in range(1, int(n)+1)]:
    shutil.copyfile(orig, item)

Vâng, tôi đã thử với python trước đó, nhưng không thích sự không liên quan ... Tôi thường đi tìm python :)
Tim

@Tim Nó phải là phông chữ của mã trên trang web này cản trở sự đẹp của mã trăn :)
Jacob Vlijm

1
Có một số cách để làm điều này.
Braiam
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.