트리 아래로 파일을 복사합니다. 단, 대상의 디렉터리는 제외하고 파일만 복사합니다.

트리 아래로 파일을 복사합니다. 단, 대상의 디렉터리는 제외하고 파일만 복사합니다.

예를 들어 100개의 폴더가 있고 각 폴더에는 JPG 및 MOV 파일이 있습니다. 모든 jpg 파일을 한 폴더에 복사하고 모든 mov 파일을 다른 폴더에 복사하고 싶습니다.

  • folder1있어요 one.jpg헤헤two.jpgone.mov

  • folder2거기 two2.jpg와 two2.mov

  • folder3있고xxx.jpgyyy.mov

원하는 결과

  • 폴더 jpgfiles에 다음이 포함되어 있습니다.one.jpg two.jpg two2.jpg xxx.jpg

  • 폴더 movfiles에 다음이 포함되어 있습니다.one.mov two2.mov yyy.mov

답변1

이를 위해 조회를 사용할 수 있습니다. 폴더 1, 폴더 2 등 위의 폴더를 사용하고 거기에서 이러한 명령을 실행합니다.

find /folder/ -type f -name "*.jpg" -exec cp {} "jpgfiles/" +
find /folder/ -type f -name "*.mov" -exec cp {} "movfiles/" +

/folder/다음은 상위 폴더입니다. 상위 폴더로 수정해야 합니다.

편집: 이 점을 지적해 주신 @godlygeek에게 감사드립니다. 고유한 파일만 복사하려면 다음 명령을 사용할 수 있습니다.

find /folder/ -type f -name "*.jpg" -exec bash -c 'test ! -f jpgfiles/${0##*/} && { cp $0 jpgfiles/${0##*/}; }' {} +
find /folder/ -type f -name "*.mov" -exec bash -c 'test ! -f movfiles/${0##*/} && { cp $0 movfiles/${0##*/}; }' {} +

고유한 파일 접미사가 있는 충돌하는 파일을 복사하려면 다음을 수행하십시오.

find /folder/ -type f -name "*.jpg" -exec bash -c 'test -f jpgfiles/${0##*/} && { cp $0 jpgfiles/${0##*/}.$RANDOM; }' {} +
find /folder/ -type f -name "*.mov" -exec bash -c 'test -f movfiles/${0##*/} && { cp $0 movfiles/${0##*/}.$RANDOM; }' {} +

관련 정보