특정 디렉터리에는 약 10,000개의 파일이 있습니다. 거기에서 무작위로 1000개의 파일을 선택하여 다른 디렉토리에 넣는 데 도움이 되는 명령이 있습니까? 선택한 파일은 원래 디렉터리에서 삭제되어야 합니다.
답변1
이 파일이 있으면 shuf
파일 이름에 개행 문자나 하위 디렉터리가 없다면 원하는 작업을 쉽게 수행할 수 있습니다.
mapfile -t sample < <(shuf -n 1000 -e given_directory/*)
mv "${sample[@]}" other_directory
find
하위 디렉터리가 있는 경우 대신 glob을 사용하여 파일 목록을 가져올 수 있습니다. 아니면 오버샘플링하고 필터링할 수도 있습니다. 또한 작업을 플래그 와 결합 find
할 수 있으므로 이름에 개행 문자가 있을 수 있는 파일을 처리하는 데 도움이 됩니다(이는 실제로 나쁜 생각이지만 반드시 가능성을 무시할 수 있다는 의미는 아닙니다) . 예를 들어,-print0
-z
shuf
find given_directory -type f -print0 |
shuf -z -n 1000 |
xargs -0 mv -t other_directory
mv -t
명령줄 시작 부분에 대상 디렉터리를 제공할 수 있는 (매우 유용한) Gnu 확장입니다. 이는 xargs
명령줄 끝에 여러 인수를 배치하는 / 모델과 잘 작동합니다.find -exec