У меня есть много файлов с различными названиями различных длин. Расширение этих файлов является jpeg.
Как изменить имена файлов к случайным сгенерированным именам?
Выполненный в каталоге с файлами:
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 для гарантии никаких конфликтов.
Используя СЛУЧАЙНЫЙ ограниченный подход. От человека 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.
Можно сделать это легко со значительной степенью уверенности, что Вы не получите имена файлов с аналогичными именами при наличии нескольких$RANDOM
s следующим образом:
for file in *.jpeg; do
mv -- "$file" "$RANDOM-$RANDOM-$RANDOM.jpeg"
done
Возможность получения того же имени 1/(32767)^3
в вышеупомянутом примере.