ファイル名を任意の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/kernel/random/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")

関連情報