これは、ファイル(実際にはディレクトリ内のすべてのファイル)の名前を任意の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")