如何将文件重命名为随机 GUID?

如何将文件重命名为随机 GUID?

任务是用随机 UUID/GUID 替换文件(实际上是目录中的所有文件)名称(但保持扩展名不变)。关于如何做到这一点有什么想法吗?

答案1

与 bahamat 答案类似,但生成实际的UUID。 UUID 有一些保留位,用于确定所使用的版本和变体。目前定义了 5 种类型的 UUID,正如您所问,随机 UUID 是版本 4。您会注意到版本 4 UUID 具有以下格式:

442b7f35-f33f-4b8d-9a07-db8ec207129e
              | '-- 变体(位 10__ -> [89AB])
              '-------- 版本(位 0100 -> 4)

此外,如果 UUID 生成失败,此版本也不会造成损坏。

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

对于 macOS

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

使用/proc/sys/内核/随机/uuid:

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

答案2

像这样的东西:

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

使用为openssl rand 16您提供 128 位 GUID。如果您需要 256 位 GUID,请使用 32。

答案3

下面是简短的 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

上面使用 Linux 上 /proc 中的文件作为 uuid 源:

[bash#] cat /proc/sys/kernel/random/uuid
d474706f-b18c-4e4b-8762-5ed577c74ac3

答案4

在 Linux 上:

(ret=0
for file in *; do
  IFS= read -r uuid < /proc/sys/kernel/random/uuid || exit
  mv -i -- "$file" "$uuid" || ret=$?
done
exit "$ret")

相关内容