파일 이름을 임의의 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

리눅스의 경우:

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

관련 정보