Рейтинг:2

Создание простого скрипта, который переименовывает файл, выбирая случайным образом из группы файлов

флаг ag

Идея состоит в том, чтобы воспроизводить звуковой файл «приветствия» во время запуска в KDE.

Внутри папки будет, например, 10 аудиофайлов. Скажем, по имени 1.ogg 2.ogg 3.ogg и т.д.

Файл, который на самом деле воспроизводится, называется привет.ogg.

Как мне случайным образом взять один из этих файлов и переименовать его как привет.ogg без потери 10 исходных файлов?

Я стараюсь изо всех сил, но терплю неудачу.

флаг hr
Похоже, вы действительно хотите случайным образом *скопировать* (не переименовывать) один из файлов
TylerW avatar
флаг gb
Не ответ на этот вопрос, но для вашего примера скрипту было бы проще выбрать и воспроизвести случайный файл, используя что-то вроде `file_to_play=$(ls Greetings/*.ogg | shuf -n 1)` вместо переименования одного случайно?
Рейтинг:8
флаг it

Нельзя и "переименовать" файл и "не потерять оригинал", придется копировать(человек КП) случайно выбранный исходный файл в привет.ogg, что-то вроде:

# выбрать среди 0.ogg .. 9.ogg
cp $(( $RANDOM % 10 )).ogg приветствия.ogg

Читать человек, вы можете инициализировать $СЛУЧАЙНО.

Erniemenendez avatar
флаг ag
Спасибо, ваш ответ помог мне, сделал это так просто !!! БЛАГОДАРНОСТЬ
Рейтинг:5
флаг hr

Если ваши файлы не обязательно именуются с помощью простой арифметической схемы, поддающейся использованию $СЛУЧАЙНО переменная, то другим вариантом является использование шуф:

shopt -s extglob

cp -- "$(printf '%s\n' !(приветствие).ogg | shuf -n 1)" приветствие.ogg

Расширенный глобус в стиле ksh !(приветствие).ogg избегает копирования существующего файла в себя - этого можно избежать, скопировав файл в другой каталог.

Ginnungagap avatar
флаг cn
Я думаю, что простая символическая ссылка подойдет вместо ненужного копирования при каждом вызове. Все еще хороший и краткий ответ, +1
Рейтинг:4
флаг us

Более элегантное решение (как уже было предложено в комментариях обоих Гиннунгагап и Джеймс С.), будет использовать символические ссылки, например:

#!/бин/баш

# Выберите один из десяти файлов наугад и сделайте переименованную копию внутри /home/$user

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

Запись: п является обе Быстрее и более эффективен с точки зрения использования диска, чем ср.

Обратите внимание на использование -f возможность перезаписать любую ссылку на предыдущий звук приветствия - см. Создать символическую ссылку - перезаписать, если она существует.


В качестве альтернативы, избегая использования $СЛУЧАЙНОбить) вместе, и используя шуф вместо:

#!/бин/ш

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

Использование шуф взято из этого отвечать к Генерация случайных чисел в определенном диапазоне).

Рейтинг:1
флаг ag

После долгих поисков я понял это. Это так просто!!!!

Я создал папку с именем GreetingsTest внутри своего /дом/$пользователь/ каталог так это явно выглядит; /home/$user/greetingsTest

Внутри у меня 10 .mp3 файлов (возможно, однажды я увеличу их до 20) и у меня также есть файл с именем рандомайзер.ш это выглядит так;

#!/бин/баш

###///// случайным образом выберите один из десяти файлов и сделайте переименованную копию внутри /home/$user

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

Так просто! Всем спасибо за помощь!!!

James S. avatar
флаг de
Вместо использования `cp`, который создает реальную копию на диске и, следовательно, работает относительно медленно, почему бы не использовать `ln -s`, который создает символическую ссылку, работает *намного* быстрее и не требует дополнительного дискового пространства?
Erniemenendez avatar
флаг ag
Большое тебе спасибо!!! я сделал человека ln, и я пошел с ln-sf СПАСИБО!!!
James S. avatar
флаг de
Ааааааааааааааааааааааааааааааааааааа. :) Файловые системы linux/unix делают это, и это действительно здорово; когда люди переходят с Windows, они обычно не знают об этом, но это отличный способ сделать много разных вещей.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.