한 디렉터리에서 n개의 무작위 파일을 선택하여 다른 폴더 + 동일하지만 파일 형식이 다른 다른 파일에 복사합니다.

한 디렉터리에서 n개의 무작위 파일을 선택하여 다른 폴더 + 동일하지만 파일 형식이 다른 다른 파일에 복사합니다.

디렉터리가 두 개 있습니다. 디렉터리를 호출해 보겠습니다.엑스그리고 그중에는 100,000개 이상의 파일, .jpg 파일이 있습니다.엑스및 .txt 파일

무작위로 선택하고 싶어요질소파일 출처:엑스그리고 폴더에 복사

이는 find + shuffle을 사용하여 관리할 수 있어야 합니다.

그런 다음 그 안에 있는 모든 파일을 찾고 싶습니다.복사된 파일과 동일한 이름, 그러나 해당 파일은 .txt 파일이므로 해당 디렉터리에 복사하세요.와트

시각화: N개 파일엑스>> 동일한 N개 파일>>와트

어떻게 해야 하나요?

답변1

#!/bin/bash

X=/path/to/X
Y=/path/to/Y
Z=/path/to/Z

mapfile -d '' -t files < <(find "$X" -type f -name '*.jpg' -print0 |
                           shuf -z -n 10 -)

for f in "${files[@]}"; do
  echo cp "$f" "$Z"
  bn=$(basename "$f" ".jpg")
  echo cp "$Y/$bn.txt" "$Z"
done

이 스크립트는 테스트되지 않았지만 원하는 작업을 수행해야 합니다. X및 변수를 올바른 값으로 설정한 다음 실행하여 어떤 작업 YZ수행할지 확인하고 필요에 따라 조정한 후 필요에 따라 작동하면 echo두 줄을 제거합니다 cp.

$files먼저 디렉토리에 있는 10개의 임의의 .jpg 파일 이름으로 배열()을 채우는 방식으로 작동합니다 $X. 파일 이름 구분 기호로 NUL을 사용하므로 모든 파일 이름, 심지어 공백, 탭, 셸 메타 문자와 같은 성가신 문자에도 작동합니다.

그런 다음 각 파일 이름을 반복하여 1. 해당 파일을 디렉터리에 복사하고 $Z, 2. 파일 이름의 기본 이름 부분을 추출하고, 3. 기본 이름 +를 .txt디렉터리에서 $Y디렉터리로 복사합니다 $Z.

그건 그렇고, 이 -d옵션이 mapfile.

관련 정보