GIF JPEG 및 WEBP 파일 이름 무작위화

GIF JPEG 및 WEBP 파일 이름 무작위화

JPEG 확장자를 사용하여 파일 이름을 무작위로 지정하는 스크립트가 있습니다.

#!/bin/bash for img in *.jpg; do newname=$(head /dev/urandom | tr -dc a-z0-9 | head -c 8) mv "$img" "$newname".jpg; done

JPEG 파일과 함께 사용하면 이 스크립트는 다음과 같은 파일 이름을 출력합니다.

0cb1v984.jpg dqm2xxoj.jpg o61bg4n5.jpg

그러나 이 bash 스크립트의 ".jpg" 확장자를 ".gif" 또는 ".webp"로 바꾸려고 하면 작동하지 않습니다.

GIF 및 WEBP의 이름을 애니메이션 GIF 및 WEBP로 바꾸려고 하여 문제가 발생한 것입니까?

이상적으로는 이러한 3가지 확장자를 가진 파일의 파일 이름을 무작위로 지정하는 bash 스크립트를 갖고 싶지만 3가지 다른 bash 스크립트를 사용하여 각 확장자의 파일 이름을 무작위로 지정할 수도 있습니다.

나는 최고 등급의 답변을 다루었습니다.이것질문을 했지만 소용이 없었습니다.

답변1

for확장을 반복하려면 또 다른 루프가 필요합니다 .

for ext in jpg gif webp; do
  for img in *.${ext}; do
    newname="$(head /dev/urandom | tr -dc a-z0-9 | head -c 8).${ext}"
    mv "$img" "$newname"
  done
done

그러나 접근 방식에는 몇 가지 문제가 있습니다.

  • 확장 시 비효율적 - 무작위 데이터를 일괄 생성하고 한 번에 8자를 가로채는 것이 더 좋습니다.
  • 이름 충돌 가능성(가능성은 낮지만 불가능하지는 않음)
  • /dev/urandom처음 10개의 "행"에 8개의 영숫자 문자를 제공하지 않을 수도 있습니다 (가능성은 낮지만 불가능하지는 않음)

그러니까 이게 개선된 버전이군요

# give our variables global scope
declare data=''
declare newname

rand() {
  # check if data contains the required # of characters...
  if [ -z "${data:${1}}" ] ; then
    # ...if not, generate 1000 more characters
    data="${data}$(tr -dc a-z0-9 < /dev/urandom | head -c 1000)"
  fi
  # fill the nominated variable with the required number of characters
  eval "${2}"="${data:0:${1}}"
  # remove the characters just used from the random data
  data="${data:${1}}"
}

for ext in jpg gif webp; do
  for img in *.${ext}; do
    while true ; do
      rand 8 newname
      # keep getting $newname values until $newname.$ext doesn't exist
      [ -e "${newname}.${ext}" ] || break
    done
    mv "${img}" "${newname}.${ext}"
  done
done

내 컴퓨터에서 이 버전은 1500개의 파일을 처리하는 데 약 11초가 걸리는 반면, 덜 효율적인 버전은 약 25초가 걸립니다.

관련 정보