Как изменить имена файлов в каталоге к случайным сгенерированным именам?

У меня есть много файлов с различными названиями различных длин. Расширение этих файлов является jpeg.

Как изменить имена файлов к случайным сгенерированным именам?

2
задан 27 August 2019 в 02:42

3 ответа

Выполненный в каталоге с файлами:

for file in *.jpeg; do
    mv -- "$file" "$RANDOM.jpeg"
done

Но существует шанс, случайные имена будут конфликтовать с тех пор $RANDOM только дает числа между 0 и 32767.

Лучшее решение, благодаря pbhj:

for file in *.jpeg; do
    mv -- "$file" "$(mktemp --dry-run XXXXXXXX.jpeg)"
done

Существует все еще шанс, случайные имена будут конфликтовать, но это значительно меньше с 8 алфавитно-цифровыми символами от mktemp. См. ответ Anselmo для гарантии никаких конфликтов.

3
ответ дан 2 December 2019 в 01:52

Используя СЛУЧАЙНЫЙ ограниченный подход. От человека Bash: "СЛУЧАЙНЫЙ Каждый раз, когда на этот параметр ссылаются, случайное целое число между 0 и 32767 сгенерировано". Так... Не больше, чем 32 768 файлов!:)

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

Использование mktemp может быть намного лучшим решением, но Вы не должны использовать - параметр пробного прогона, потому что это генерирует имя, но не гарантирует, что файл с тем именем не существует. Используемый таким образом это стало только своего рода случайным генератором.

Так, мои простые делают предложение:

for file in *.jpeg; do
    new_file="$(mktemp XXXXXXXX.jpeg)"
    mv -f -- "$file" "$new_file"
done

Шаг за шагом.

new_file="$(mktemp XXXXXXXX.jpeg)"

Выполняя mktemp тот путь, это создает файл безопасно с новым случайным именем, заботясь о случайном повторении. Это также произвело название созданного файла, который я ловлю в new_file.

mv -f -- "$file" "$new_file"

Выполнение mv с-f вынуждает переименование изображения перезаписать new_file.

2
ответ дан 2 December 2019 в 01:52

Можно сделать это легко со значительной степенью уверенности, что Вы не получите имена файлов с аналогичными именами при наличии нескольких$RANDOMs следующим образом:

for file in *.jpeg; do
    mv -- "$file" "$RANDOM-$RANDOM-$RANDOM.jpeg"
done

Возможность получения того же имени 1/(32767)^3 в вышеупомянутом примере.

0
ответ дан 2 December 2019 в 01:52

Другие вопросы по тегам:

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