주어진 디렉토리에서 임의의 파일 하위 집합을 선택하십시오.

주어진 디렉토리에서 임의의 파일 하위 집합을 선택하십시오.

특정 디렉터리에는 약 10,000개의 파일이 있습니다. 거기에서 무작위로 1000개의 파일을 선택하여 다른 디렉토리에 넣는 데 도움이 되는 명령이 있습니까? 선택한 파일은 원래 디렉터리에서 삭제되어야 합니다.

답변1

이 파일이 있으면 shuf파일 이름에 개행 문자나 하위 디렉터리가 없다면 원하는 작업을 쉽게 수행할 수 있습니다.

mapfile -t sample < <(shuf -n 1000 -e given_directory/*)
mv "${sample[@]}" other_directory

find하위 디렉터리가 있는 경우 대신 glob을 사용하여 파일 목록을 가져올 수 있습니다. 아니면 오버샘플링하고 필터링할 수도 있습니다. 또한 작업을 플래그 와 결합 find할 수 있으므로 이름에 개행 문자가 있을 수 있는 파일을 처리하는 데 도움이 됩니다(이는 실제로 나쁜 생각이지만 반드시 가능성을 무시할 수 있다는 의미는 아닙니다) . 예를 들어,-print0-zshuf

find given_directory -type f -print0 |
shuf -z -n 1000 |
xargs -0 mv -t other_directory

mv -t명령줄 시작 부분에 대상 디렉터리를 제공할 수 있는 (매우 유용한) Gnu 확장입니다. 이는 xargs명령줄 끝에 여러 인수를 배치하는 / 모델과 잘 작동합니다.find -exec

관련 정보