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

[root@satish: ~/Desktop] $ whatis Linux

Linux: ничто соответствующее.

6
19.01.2011, 02:45
3 ответа

Подобный ответу bahamat, но генерирует фактические UUID. UUID имеют некоторые зарезервированные биты, которые используются для определения версии и используемого варианта. В настоящее время существует 5 типов UUID определенные, случайные UUID, как Вы попросили, версия 4. Вы отметите, что версия 4 UUID имеет этот формат:

442b7f35-f33f-4b8d-9a07-db8ec207129e
              |    '-- variant (bits 10__ -> [89AB])
              '------- version (bits 0100 -> 4)

Кроме того, эта версия не наносит ущерб в случае, если поколение UUID перестало работать.

for i in *; do uuid=$(uuidgen -r) && mv -- "$i" "$uuid.${i##*.}" done

Используя/proc/sys/kernel/random/uuid:

for i in *; do uuid=$(cat /proc/sys/kernel/random/uuid) && mv -- "$i" "$uuid.${i##*.}" done
5
27.01.2020, 20:24

Что-то вроде этого:

for i in *; do mv -- "$i" "$(openssl rand -hex 16).${i##*.}"; done

Используя openssl rand 16 дает Вам GUID на 128 битов. Используйте 32, если Вы хотите GUID на 256 битов.

4
27.01.2020, 20:24
  • 1
    , Если у Вас есть он, uuidgen работы также (sys-apps/util-linux в хинду) –  Michael Mrozek♦ 18.01.2011, 05:39
  • 2
    не абсолютно случайны. Случайные UUID являются версией 4 UUID и имеют только 122 случайных бита, не 128. Фиксированные биты определяют версию (4) и вариант UUID. Необходимо использовать также uuidgen или /proc/sys/kernel/random/uuid генерировать UUID. –  Juliano 19.01.2011, 02:18

Короткий сценарий Perl ниже - использование кошки для получения uuid не является самым чистым/самым быстрым способом кодировать его, но это сохраняет команду короткой:

perl -e '
  foreach (@ARGV) {
    my $uid=qx|cat /proc/sys/kernel/random/uuid|;
    chomp $uid;
    (my $new=$_)=~s#(.*)\.#$uid.#;
    rename($_, $new)
  }
' *.file_ext

Вышеупомянутое использование файл в/proc на Linux как источник uuids:

[bash#] cat /proc/sys/kernel/random/uuid
d474706f-b18c-4e4b-8762-5ed577c74ac3
2
27.01.2020, 20:24
  • 1
    ls вывод не предназначен, чтобы быть проанализированным. ls предназначен для создания читаемого пользователем вывода, и он может заменить символами в именах файлов. –  Juliano 19.01.2011, 02:25
  • 2
    @Juliano - но использование шарика оболочки "*.file_ext" рискует "списком аргументов слишком длинная ошибка", тогда как ошибочные риски от "\ls-1 | конвейер..." минимален - это - более прагматическое решение. –  frielp 19.01.2011, 10:58

Теги

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