Puncte:2

Crearea unui script simplu care redenumește un fișier selectat aleatoriu dintr-un grup de fișiere

drapel ag

Ideea este să redați un fișier de sunet „de salut” în timpul pornirii în KDE.

În interiorul unui folder ar exista, de exemplu, 10 fișiere audio. Să zicem, numit 1.ogg 2.ogg 3.ogg etc.

Fișierul care se redă efectiv este numit salutări.ogg.

Cum iau la întâmplare unul dintre aceste fișiere și îl redenumesc ca salutări.ogg fără a pierde cele 10 fișiere originale?

Încerc din răsputeri, dar nu reușesc lamentabil.

drapel hr
Se pare că doriți de fapt să *copiați aleatoriu* (nu să redenumiți) unul dintre fișiere
TylerW avatar
drapel gb
Nu este un răspuns la această întrebare, dar, de exemplu, ar fi mai simplu pentru un script să aleagă și să redea un fișier aleatoriu folosind ceva de genul `file_to_play=$(ls greetings/*.ogg | shuf -n 1)` în loc să redenumească unul la intamplare?
Puncte:8
drapel it

Nu puteți „redenumi” un fișier și „nu pierde originalul”, va trebui să copiați (om cp) fișierul original selectat aleatoriu la salutări.ogg, ceva asemănător cu:

# selectați dintre 0.ogg .. 9.ogg
cp $(( $RANDOM % 10 )).ogg salutări.ogg

Citit man bash, poate doriți să inițializați $RANDOM.

Erniemenendez avatar
drapel ag
Mulțumesc, răspunsul tău m-a ajutat, a făcut-o atât de simplu!!! MULȚUMIRI
Puncte:5
drapel hr

Dacă fișierele dvs. nu sunt neapărat denumite cu o schemă aritmetică simplă, care poate fi utilizată a shell-ului $RANDOM variabilă, atunci o altă opțiune este să utilizați shuf:

shopt -s extglob

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

Globul extins în stil ksh !(salutare).ogg evită copierea fișierului existent în sine - ați putea evita asta prin copierea fișierului într-un director diferit.

Ginnungagap avatar
drapel cn
Cred că un simplu link simbolic s-ar descurca bine în loc să copieze inutil fiecare invocare. Încă un răspuns frumos și concis, +1
Puncte:4
drapel us

O soluție mai elegantă (cum s-a sugerat deja în comentariile ambilor Ginnungagap și James S.), ar fi să folosiți legături simbolice, astfel:

#!/bin/bash

# Selectați dintre zece fișiere la întâmplare și faceți o copie redenumită în /home/$user

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

Notă: ln este ambii Mai repede și mai eficient, în ceea ce privește utilizarea discului, decât cp.

Observați utilizarea -f opțiunea de a suprascrie orice link către un sunet de salut anterior - vezi Creați o legătură simbolică - suprascrieți dacă există una.


Alternativ, evitarea folosirii $RANDOM (și bash) cu totul și folosind shuf in schimb:

#!/bin/sh

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

Utilizarea shuf este luat din aceasta Răspuns la Generați numere aleatorii într-un interval specific).

Puncte:1
drapel ag

După o lungă căutare, mi-am dat seama. Este atat de simplu!!!!

Am creat un folder numit greetingsTest în interiorul meu /home/$user/ director deci arata evident ca; /home/$user/greetingsTest

Acolo am 10 .mp3 fișiere (poate într-o zi o voi extinde la 20) si am si un fisier numit randomizator.sh care arată așa;

#!/bin/bash

###///// selectați dintre zece fișiere la întâmplare și faceți o copie redenumită în /home/$user

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

Atât de simplu! Va multumesc tuturor pentru ajutor!!!

James S. avatar
drapel de
În loc să folosiți `cp`, care face o copie reală pe disc și, prin urmare, este relativ lentă, de ce să nu folosiți `ln -s` care creează o legătură simbolică și este *mult* mai rapidă și nu utilizează spațiu suplimentar pe disc?
Erniemenendez avatar
drapel ag
Mulțumesc foarte mult!!! id a facut un om ln si am mers cu ln-sf MULTUMESC!!!
James S. avatar
drapel de
Awww da. :) sistemele de fișiere linux/unix fac chestia asta și este foarte tare; când oamenii trec de la Windows, de obicei, nu știu despre asta, dar este o modalitate excelentă de a face o mulțime de lucruri diferite.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.