Score:2

การสร้างสคริปต์อย่างง่ายที่เปลี่ยนชื่อไฟล์โดยสุ่มเลือกจากกลุ่มของไฟล์

ธง ag

แนวคิดคือการเล่นไฟล์เสียง "ทักทาย" ระหว่างการเริ่มต้นใน KDE

ภายในโฟลเดอร์จะมีไฟล์เสียง 10 ไฟล์ สมมติว่าชื่อ 1.ogg 2.ogg 3.ogg เป็นต้น

ไฟล์ที่เล่นจริงเรียกว่า ทักทาย.ogg.

ฉันจะสุ่มเอาไฟล์เหล่านี้มาหนึ่งไฟล์และเปลี่ยนชื่อเป็นได้อย่างไร ทักทาย.ogg โดยไม่สูญเสียไฟล์ต้นฉบับ 10 ไฟล์?

ฉันพยายามอย่างดีที่สุด แต่ฉันล้มเหลวอย่างน่าสังเวช

hr flag
ดูเหมือนว่าคุณต้องการสุ่ม *คัดลอก* (ไม่เปลี่ยนชื่อ) ไฟล์ใดไฟล์หนึ่ง
TylerW avatar
gb flag
ไม่ใช่คำตอบสำหรับคำถามนี้ แต่สำหรับตัวอย่างของคุณ สคริปต์จะเลือกและเล่นไฟล์แบบสุ่มโดยใช้บางอย่างเช่น `file_to_play=$(ls greetings/*.ogg | shuf -n 1)` แทนการเปลี่ยนชื่อไฟล์ สุ่ม?
Score:8
ธง it

คุณไม่สามารถ "เปลี่ยนชื่อ" ไฟล์และ "ไม่สูญเสียต้นฉบับ" คุณจะต้องคัดลอก (แมน ซีพี) ไฟล์ต้นฉบับที่เลือกแบบสุ่มไปที่ ทักทาย.ogg, สิ่งที่ต้องการ:

# เลือกระหว่าง 0.ogg .. 9.ogg
cp $(( $RANDOM % 10 )).ogg ทักทาย.ogg

อ่าน ผู้ชายทุบตีคุณอาจต้องการเริ่มต้น $สุ่ม.

Erniemenendez avatar
ag flag
ขอบคุณคำตอบของคุณช่วยฉันทำให้มันง่ายมาก !!! ขอบใจ
Score:5
ธง hr

หากไฟล์ของคุณไม่จำเป็นต้องตั้งชื่อด้วยโครงร่างเลขคณิตอย่างง่ายที่สอดคล้องกับการใช้เชลล์ $สุ่ม ตัวแปรแล้วอีกทางเลือกหนึ่งคือการใช้ สับ:

shopt -s extglob

cp -- "$(printf '%s\n' !(greeting).ogg | shuf -n 1)" greeting.ogg

ลูกโลกแบบขยายสไตล์ ksh !(ทักทาย).ogg หลีกเลี่ยงการคัดลอกไฟล์ที่มีอยู่ไปยังตัวเอง - คุณสามารถหลีกเลี่ยงได้โดยการคัดลอกไฟล์ไปยังไดเร็กทอรีอื่น

Ginnungagap avatar
cn flag
ฉันคิดว่า symlink ธรรมดาจะทำได้ดีแทนที่จะคัดลอกทุกการร้องขอโดยไม่จำเป็น ยังคงเป็นคำตอบที่ดีและกระชับ +1
Score:4
ธง us

โซลูชันที่หรูหรากว่า (ตามที่แนะนำไว้ในความคิดเห็นของทั้งคู่ กินนุงะกัป และ เจมส์ เอส.) จะใช้ symlink เช่น:

#!/bin/bash

# เลือกจากสิบไฟล์โดยสุ่มและทำสำเนาเปลี่ยนชื่อภายใน /home/$user

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

บันทึก: เป็น ทั้งสอง เร็วขึ้น และ มีประสิทธิภาพมากกว่าในแง่ของการใช้ดิสก์มากกว่า ซีพี.

หมายเหตุการใช้ -ฉ ตัวเลือกในการเขียนทับลิงก์ไปยังเสียงทักทายก่อนหน้า - ดู สร้าง symlink - เขียนทับถ้ามี.


หรือหลีกเลี่ยงการใช้ $สุ่ม (และ ทุบตี) พร้อมกันและใช้ สับ แทน:

#!/bin/sh

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

การใช้ สับ นำมาจากสิ่งนี้ คำตอบ ถึง สร้างตัวเลขสุ่มในช่วงที่กำหนด).

Score:1
ธง ag

หลังจากค้นหามานาน ฉันก็ค้นพบว่า มันง่ายมาก !!!!

ฉันสร้างโฟลเดอร์ชื่อ greetingsTest ภายในไฟล์ /home/$user/ ไดเรกทอรี ดูเหมือนว่า; /home/$user/greetingsTest

ข้างในมี 10 ค่ะ .mp3 ไฟล์ (สักวันหนึ่งฉันจะขยายเป็น 20) และฉันยังมีไฟล์ชื่อ Randomizer.sh ที่มีลักษณะเช่นนี้

#!/bin/bash

###////// เลือกจากสิบไฟล์โดยการสุ่ม และสร้างสำเนาที่เปลี่ยนชื่อภายใน /home/$user

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

ง่ายมาก! ขอบคุณสำหรับความช่วยเหลือ!!!

James S. avatar
de flag
แทนที่จะใช้ `cp` ซึ่งทำการคัดลอกจริงบนดิสก์และค่อนข้างช้า ทำไมไม่ใช้ `ln -s` ซึ่งสร้างลิงก์สัญลักษณ์และ *เร็วกว่ามาก* และไม่ใช้พื้นที่ดิสก์เพิ่มเติม
Erniemenendez avatar
ag flag
ขอบคุณมาก!!! id ไม่ผู้ชาย ln และฉันไปกับ ln-sf ขอบคุณ!!!
James S. avatar
de flag
อร๊ายยยยยย :) ระบบไฟล์ linux/unix ทำสิ่งนี้และมันเจ๋งมาก เมื่อมีคนย้ายจาก Windows พวกเขามักจะไม่ทราบเกี่ยวกับเรื่องนี้ แต่เป็นวิธีที่ดีในการทำสิ่งต่างๆ มากมาย

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา