Сценарий Bash для предварительного ожидания случайного числа во все файлы

У меня есть "умный" телефон, который, кажется, не имеет музыкальную функцию перестановки, таким образом, следующая лучшая вещь состоит в том, чтобы записать сценарий удара для предварительного ожидания всех имен файлов в текущем каталоге со случайным числом.

Действительно ли это трудно сделать?

5
задан Mateusz Piotrowski 18 August 2017 в 10:19
поделиться

3 ответа

Нет, это не сложно сделать. Однако это испортит ваши тщательно продуманные имена файлов, и их будет трудно отменить.

Вы можете использовать $RANDOM как простой источник случайных чисел в bash. Для вашего случая:

#!/bin/bash
for file in *; do
  mv "$file" $RANDOM-"$file"
done

Я не проверял это. Возможно, вы захотите проверить это самостоятельно на небольшой образце, чтобы убедиться, что вы знаете, что он делает.

5
ответ дан 18 December 2019 в 13:10
поделиться

Этот скрипт перетасует файлы и перетасует их, если они уже были перетасованы. Если вы передадите ему аргумент -u, он перетасует файлы (удалит случайный префикс).

#!/bin/bash
for file in *.mp3
do
    if [[ -d $file ]]
    then
        continue    # skip directories
    fi
    if [[ $file =~ ^1[0-9]{5}9-(.*).mp3$ ]]    # get basename
    then
        name=${BASH_REMATCH[1]}                # of a previously shuffled file
    else
        name=${file%.mp3}                      # of an unshuffled file
    fi
    if [[ $1 != -u ]]
    then
        mv "$file" "1$(printf "%05d" $RANDOM)9-$name.mp3"    # shuffle
    else
        if [[ ! -e "$file.mp3" ]]
        then
            mv "$file" "$name.mp3"                           # unshuffle
        fi
    fi
done

Он использует пятизначное случайное число фиксированной ширины после "1", за которым следует "9-", поэтому имена перетасованных файлов имеют вид: 1ddddd9-filename, возможно с пробелами - и прочими вещами.1983.mp3.

Если вы повторно запустите скрипт, он перетасует файлы, изменив случайное число в префиксе.

Аргумент -u удалит префикс 1ddddd9-.

Для работы скрипта требуется Bash >= версии 3.2.

4
ответ дан 18 December 2019 в 13:10
поделиться

Не очень сложно. Что-то вроде:

for i in *; do mv "$i" $RANDOM-"$i"; done
3
ответ дан 18 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: