Điểm:2

Tạo một tập lệnh đơn giản đổi tên tệp chọn ngẫu nhiên từ một nhóm tệp

lá cờ ag

Ý tưởng là phát tệp âm thanh "lời chào" trong khi khởi động trong KDE.

Trong một thư mục, chẳng hạn sẽ có 10 tệp âm thanh. Hãy nói, được đặt tên 1.ogg 2.ogg 3.ogg vân vân.

Tệp thực sự phát được gọi là lời chào.ogg.

Làm cách nào để lấy ngẫu nhiên một trong các tệp này và đổi tên thành lời chào.ogg mà không làm mất 10 tập tin gốc?

Tôi đang cố gắng hết sức, nhưng tôi đang thất bại thảm hại.

lá cờ hr
Có vẻ như bạn thực sự muốn *sao chép* ngẫu nhiên (không đổi tên) một trong các tệp
TylerW avatar
lá cờ gb
Không phải là câu trả lời cho câu hỏi này, nhưng đối với ví dụ của bạn, sẽ đơn giản hơn nếu tập lệnh chọn và phát một tệp ngẫu nhiên bằng cách sử dụng một cái gì đó như `file_to_play=$(ls Greetings/*.ogg | shuf -n 1)` thay vì đổi tên một tệp ngẫu nhiên?
Điểm:8
lá cờ it

Bạn không thể "đổi tên" một tệp và "không làm mất bản gốc", bạn sẽ phải sao chép (người đàn ông cp) tệp gốc được chọn ngẫu nhiên để lời chào.ogg, cái gì đó như:

# chọn trong số 0.ogg .. 9.ogg
cp $(( $RANDOM % 10 )).ogg lời chào.ogg

Đọc người đàn ông bash, bạn có thể muốn khởi tạo $NGẪU NHIÊN.

Erniemenendez avatar
lá cờ ag
Cảm ơn bạn, câu trả lời của bạn đã giúp tôi hiểu, làm cho nó thật đơn giản !!! CẢM ƠN
Điểm:5
lá cờ hr

Nếu các tệp của bạn không nhất thiết phải được đặt tên bằng sơ đồ số học đơn giản có thể sử dụng trình bao $NGẪU NHIÊN biến, thì một tùy chọn khác là sử dụng suf:

shopt -s extglob

cp -- "$(printf '%s\n' !(lời chào).ogg | shuf -n 1)" lời chào.ogg

Toàn cầu mở rộng kiểu ksh !(chào).ogg tránh sao chép tệp hiện có vào chính nó - bạn có thể tránh điều đó bằng cách sao chép tệp vào một thư mục khác.

Ginnungagap avatar
lá cờ cn
Tôi nghĩ rằng một liên kết tượng trưng đơn giản sẽ hoạt động tốt thay vì sao chép không cần thiết trên mỗi lệnh gọi. Vẫn là một câu trả lời hay và súc tích, +1
Điểm:4
lá cờ us

Một giải pháp tao nhã hơn (như đã được đề xuất trong các nhận xét của cả hai GinnungagapJames S.), sẽ là sử dụng các liên kết tượng trưng, ​​như vậy:

#!/bin/bash

# Chọn ngẫu nhiên trong số mười tệp và tạo một bản sao được đổi tên bên trong /home/$user

ln -sf $(( $RANDOM % 10)).mp3 /home/x/greetings.mp3

Ghi chú: lncả hai nhanh hơn hiệu quả hơn, về mặt sử dụng đĩa, so với cp.

Lưu ý việc sử dụng các -f tùy chọn ghi đè bất kỳ liên kết nào vào âm thanh lời chào trước đó - xem Tạo liên kết tượng trưng - ghi đè nếu có.


Ngoài ra, tránh sử dụng $NGẪU NHIÊN (và đánh đập) hoàn toàn và sử dụng suf thay thế:

#!/bin/sh

rand=`shuf -i 1-10 -n 1`
ln -sf ${rand}.mp3 /home/x/greetings.mp3

Việc sử dụng suf được lấy từ cái này câu trả lời đến Tạo số ngẫu nhiên trong phạm vi cụ thể).

Điểm:1
lá cờ ag

Sau một thời gian dài tìm kiếm, tôi đã tìm ra nó. Nó rất đơn giản!!!!

Tôi đã tạo một thư mục có tên là GreetingsTest bên trong /home/$user/ danh mục vì vậy nó rõ ràng trông giống như; /home/$user/greetingsTest

Trong đó tôi có 10 .mp3 tệp (có thể một ngày nào đó tôi sẽ mở rộng nó lên 20) và tôi cũng có một tập tin gọi là ngẫu nhiên.sh trông như thế này;

#!/bin/bash

###///// chọn ngẫu nhiên trong số mười tệp và tạo một bản sao được đổi tên bên trong /home/$user

cp $(( $RANDOM % 10)).mp3 /home/x/greetings.mp3

Quá dễ! Cảm ơn tất cả các bạn đã giúp đỡ!!!

James S. avatar
lá cờ de
Thay vì sử dụng `cp`, tạo bản sao thực sự trên đĩa và do đó tương đối chậm, tại sao không sử dụng `ln -s` để tạo liên kết tượng trưng và nhanh hơn *nhiều* và không sử dụng thêm bất kỳ dung lượng đĩa nào?
Erniemenendez avatar
lá cờ ag
Cám ơn rất nhiều!!! id đã làm một người đàn ông ln và tôi đã đi với ln-sf CẢM ƠN BẠN!!!
James S. avatar
lá cờ de
Ôi chao. :) hệ thống tập tin linux/unix làm được điều này và nó thực sự rất tuyệt; khi mọi người chuyển từ Windows sang, họ thường không biết về nó nhưng đó là một cách tuyệt vời để làm nhiều việc khác nhau.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.