2014-10-28 2 views
0

하위 폴더가있는 폴더가 있습니다. 이 하위 폴더에는 .jpg 및 .mov 파일이 모두 있습니다.파일 형식에 따라 파일을 복사하는 방법

내가 원하는 것은 트리를 다른 루트 폴더에 복제하지만 .mov 파일 만 포함하는 것입니다.

마술 같이 처리 할 수있는 터미널 명령이 있습니까? 나는 많은 시간을 절약 할 수있는 닌자와 같은 기술을 가진 리눅스 전문가가 있기를 바랍니다.

예 :

현재 :

Pictures 
-- 2014 
----- January 
--------- file1.jpg 
--------- file1.mov 
----- February 
--------- file1.jpg 
--------- file1.mov 
----- March 
--------- file1.jpg 
--------- file2.jpg 
----- April 
--------- file1.mov 
--------- file2.mov 



Desired: 
Pictures 
-- 2014 
----- January 
--------- file1.jpg 
----- February 
--------- file1.jpg 
----- March 
--------- file1.jpg 
--------- file2.jpg 



Movies 
-- 2014 
----- January 
--------- file1.mov 
----- February 
--------- file1.mov 
----- April 
--------- file1.mov 
--------- file2.mov 
+0

OS X의 Linux에서 대답이 약간 다를 수 있습니다. –

+0

이 작업을 한 번만 수행하면 되나요? 아니면이 작업을 반복하여 새로운 사진과 동영상을 각각의 디렉토리로 정렬해야합니까? – Omnipresence

+0

한 번만 수행하면됩니다. 내 사진 컬렉션은 주로 비디오 때문에 거대하다는 것을 깨달았습니다. 그래서 내 아이디어는 트리 구조와 일치하는 평행 폴더를 만들고 비디오 만 포함하는 것입니다. 그런 다음 앞으로는 수동으로 정렬 할 수 있습니다. – Kenny

답변

1

I finddirname을 사용합니다. Linux와 MacOS에서 같은 방식으로 작동해야합니다. 이 쉘 스크립트는 bash에서 작동합니다.

참고 : 당신이 인쇄 명령보다는 실행할 수 있도록 내가 echo 모든 필수 명령을 접두사가 잘못된 위치에 또는 $source$target의 잘못된 값으로 실행하지 않도록 만들기 it. 원하는대로 작동하는지 확인한 다음 echo을 모두 제거하십시오 (예 : 을 mkdir ...으로 바꿉니다). 이것은 복잡한 쉘 스크립트를 작성할 때 일반적인 예방 조치입니다.

source="/path/to/source" 
target="/path/to/target" 
cd "$source" 
find . -type f -name '*.mov' | 
    while read fn ; do 
     path=`dirname $fn` 
     echo mkdir -p "$target/$path" # -p is essential here 
     echo cp "$fn" "$target/$path/" 
    done 

는 여기에서 우리는 $source 디렉토리에 *.mov 파일 목록을 반복하고, 각 파일에 대해 우리는 dirname를 사용하여 디렉토리 이름의 압축을 풉니 다. 그런 다음 에 해당 하위 디렉토리를 만들고 (모든 필수 하위 디렉토리를 만들고 디렉토리가 이미 있으면 실패하지 않음) 최종적으로 파일을 복사합니다.

+0

고맙습니다. 좋은 해결책 인 것 같습니다. – Kenny

1

내가 구문이 OS에 같은 희망, rsync을 사용하는 것이 좋습니다 것 X

rsync -vrR --include="*.jpg" --include="*/" --exclude="*" /path/to/source /path/to/target 
당신은 두 개의 별도의 명령을 실행해야합니다

* .mov 및 * .jpg의 경우 대상 디렉토리가 다르므로

+0

좋은 한 줄 솔루션.GUI 도구를 대신 사용했기 때문에 시도하지는 않았습니다. :) – Kenny

0

도움이 될만한 경우 실제로 명령 줄이 필요없는 간단한 해결책을 찾았습니다. FreeFileSync를 사용하여 파일을 새 트리에 복사 한 다음 다시 돌아가서 파인더를 사용하여 복사 한 파일을 제거했습니다. 여전히 2 단계 프로세스이지만 명령 행을 사용하지 않았으므로 간단합니다.

FreeFileSync에는 필터링 기능이 있으므로 복사 할 비디오 만 분리 할 수있었습니다.

그림 폴더에서 비디오를 제거하는 것은 파인더 검색 기능을 사용하고 비디오 파일 형식에서만 필터링하는 것만 큼 간단합니다. 그런 다음 한 번에 한 번 삭제하면 모두 삭제되었습니다.

관련 문제