2013-10-25 20 views
8

Tôi bắt đầu tìm hiểu cách sử dụng các lệnh bash shell và kịch bản lệnh trong Linux.tạo nhiều bản sao của một tệp bằng bash với một tập lệnh

Tôi muốn tạo tập lệnh sẽ lấy tệp nguồn và tạo số lượng bản sao được đặt tên đã chọn. Ví dụ:

Ví dụ, tôi có nguồn là testFile và tôi chọn 15 bản sao, vì vậy nó tạo testFile1, 2, 3 ... 14, 15 ở cùng một vị trí.

Để thử và đạt được điều này tôi đã cố gắng để làm cho lệnh sau:

for LABEL in {$X..$Y}; do cp $INPUT $INPUT$LABEL; done 

Tuy nhiên, thay vì tạo file từ X đến Y, nó làm chỉ là một tập tin với (ví dụ) {1 .. 5} được thêm vào thay vì các tệp 1, 2, 3, 4 và 5

Làm cách nào để thay đổi nó để sử dụng đúng biến số làm số cho vòng lặp?

+0

liên quan, nếu không hoàn toàn trùng lặp. .. http://stackoverflow.com/questions/14990185/make-multiple-copies-of-files-with-a-shell-script – beroe

Trả lời

6

Cơ chế brace expansion có chút hạn chế; nó không hoạt động với các biến, chỉ có các chữ.

Đối với những gì bạn muốn, bạn có thể có lệnh seq, và có thể viết:

INPUT=testFile 
for num in $(seq 1 15) 
do 
    cp "$INPUT" "$INPUT$num" 
done 
+0

Tôi đã thử lệnh đó nhưng có lỗi này: ./copymany.sh: dòng 14: $ {seq 1 15}: thay thế không hợp lệ –

+0

Tôi đã xóa ll mã của tôi và nghĩa đen chỉ dán lệnh của bạn, và nó nói "cp: thiếu toán hạng đích tập tin sau khi '1' (và mọi số khác đến 15" –

+0

tôi đã sử dụng dấu ngoặc đơn ('()'); mã ban đầu của bạn hiển thị '{}' niềng răng. Bạn không thể hiện cách '$ INPUT' được thiết lập, vì vậy tôi không thể thiết lập nó, nhưng các thông báo lỗi ngụ ý rằng lệnh' cp' của bạn chỉ nhìn thấy số, điều đó có nghĩa là '$ INPUT' chưa được đặt . Bạn cần thêm mã đó vào mã của mình. Ngoài ra, nó sẽ là một ý tưởng tốt để kèm theo các tên tập tin trong dấu ngoặc kép. Nó không phải là vấn đề vì bạn có lẽ không có không gian vv trong tên, nhưng nó dễ dàng được cho là tốt hơn để được an toàn hơn xin lỗi. –

2

Sử dụng một C-style vòng lặp for:

$ x=0 y=15 
$ for ((i=x; i<=y; i++)); do cp "$INPUT" "$INPUT$i"; done 
+0

Tuyệt vời, cảm ơn bạn rất nhiều. Có cách nào để sửa đổi điều đó để cho nó có chữ cái (A-Z) cũng như số không? –

+0

Ngoài ra, tại sao nó hoạt động nếu tôi nhập nó vào dòng lệnh, nhưng nếu tôi cố gắng chạy nó như một kịch bản gọi là copymany.sh nó nói "cp: không thể stat' ': Không có tệp hoặc thư mục " –

+0

' cho tôi trong {a..z}; do ... ' –

Các vấn đề liên quan