파일 이름이 많은 폴더가 있는데 그중 일부는 정말 이상하고 의미가 없어서 이름을 다음으로 바꾸고 싶다고 가정해 보겠습니다.
File-1
File-2
File-3
..
나는 이것을 시도했습니다 (에코는 tryng를 위한 것입니다)
for name in *; do echo mv $name File-`echo $(( RANDOM % (10 - 5 + 1 ) + 1 ))`;done
근데 중복 많이 줘
mv bio1 file-3
mv memory23 file-1
mv mernad file-3
mv nio2 file-4
mv nun3 file-4
답변1
shuf
(GNU coreutils 패키지에서)를 사용할 수도 있습니다 .준비단일 무작위 샘플 대신 - 다음과 같습니다.
for f in *; do read i; echo mv -- "$f" "file-$i"; done < <(shuf -i 1-10)
또는 (아마도 더 나을 것입니다) 셔플파일 이름-그런 다음 순서대로 이름을 바꾸십시오.
i=1; shuf -z -e -- * | while IFS= read -rd '' f; do echo mv -- "$f" "File-$((i++))"; done
답변2
pre=file ;
for old in * ;
do new=`xxd -l 16 -ps /dev/urandom` ;
while [ -f "$pre-$new" ] ; do new=`xxd -l 16 -ps /dev/urandom` ; done ;
mv "$old" "$pre-$new" ;
done ;
xxd
일반적으로 package.json이 포함된 바이너리 파일입니다 vim-common
.
xxd
-엘속성은 원하는 임의의 길이를 나타냅니다.
xxd
-추신포스트스크립트 순수 16진수 덤프 스타일 이름을 가져오는 것입니다(예: a4c794f3861f5d3e36ca9b0afd15ceab).
/dev/urandom
Linux 커널 의사 난수 생성기가 있습니까? 그렇지 않은 경우 다음과 같이 작성하십시오.mknod -m 444 /dev/urandom c 1 9
while [ -f "$pre-$new" ]
명령보장하다, 같은 이름의 다른 파일이 없습니다.
이 명령은 일반적으로 패키지 [
에 포함되어 있습니다 .coreutils
변수는 pre
이름 접두어로 선택됩니다. 접두어를 원하지 않으면 공백으로 남겨둘 수 있습니다.pre= ;
예를 들어:
file 1
file 2
file 3
file 4
file 5
이 되다 pre=file
:
file-062b9bcde91f1c56084956d175cfdfa3
file-3e7ec1bd5324a485a3402b106d320f73
file-648cf4550c70b2531350f231670fc982
file-074b2828b004f45581784ff1705c7ff3
file-481be2bb21f4b1e637293ae0ecf14f74
답변3
중복된 값이 무작위로 반환될 수 있습니다. 순차적으로 숫자를 생성하는 것은 어떻습니까?
count=0
for name in *; do count=`expr $count + 1` ; echo mv $name File-$count;done
답변4
파일 이름을 순서대로 지정하려면(예: File-1 -> File-n) 순차적으로 수행해야 합니다. --
count=0; for i in * ; do mv $i file-${count}; ((count++)); done