작업은 파일(실제로 디렉터리의 모든 파일) 이름을 임의의 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")