표준 Linux 명령을 사용하여 디렉터리에서 임의의 파일 집합(예: 30개)을 나열하는 방법이 있습니까? (존재하다 zsh
)
상위 답변은 다음과 같습니다.여기나에게 적합하지 않음 ( sort
옵션이 인식되지 않음 -R
)
답변1
ls
출력을 파이핑해 보십시오 .shuf
,예를 들어
$ touch 1 2 3 4 5 6 7 8 9 0
$ ls | shuf -n 5
5
9
0
8
1
이 -n
플래그는 원하는 임의 파일 수를 지정합니다.
답변2
zsh를 언급한 이후:
rand() REPLY=$RANDOM
print -rl -- *(o+rand[1,30])
print
say를 say ogg123
로 바꿀 수 있습니다 .*
**/*.ogg
답변3
간단한 해결책ls 구문 분석을 피하세요또한 공백에서도 작동합니다.
shuf -en 30 dir/* | while read file; do
echo $file
done
답변4
Zsh만 사용하는 한 줄의 코드:
files=(*); for x in {1..30}; do i=$((RANDOM % ${#files[@]} + 1)); echo "${files[i]}"; done
배열 인덱싱이 0부터 시작하는 Bash에서도 마찬가지입니다.
files=(*); for x in {1..30}; do i=$((RANDOM % ${#files[@]})); echo "${files[i]}"; done
두 버전 모두 중복은 고려되지 않습니다.