특정 파일 확장자를 가진 파일을 추출하고 디렉터리 구조를 보존하시겠습니까?

특정 파일 확장자를 가진 파일을 추출하고 디렉터리 구조를 보존하시겠습니까?

날짜별로 구성된 디렉터리에 많은 .CR2 및 .ARW 파일이 혼합되어 있습니다(2016에는 폴더 06과 07이 있고 그 안에 매일 폴더가 있습니다. 예를 들어 파일은 2016/06/03에 있을 수 있습니다).

구조를 유지하면서 .ARW 파일을 별도의 폴더에 추출하고 싶습니다. 가능합니까?

즉, 구조가 동일한 두 개의 2016 폴더를 원하지만 그 중 하나에는 .ARW 파일만 있고 하나에는 .CR2 파일만 필요합니다.

답변1

이러한 rsync 명령은 요구 사항을 충족해야 합니다.

그러면 ARW가 실행됩니다.

rsync -arvz --progress --include='*.ARW' --include="*/" --exclude="*" ./source-dir-2016 ./target-ARW-2016

이것은 CR2를 수행합니다

rsync -arvz --progress --include='*.CR2' --include="*/" --exclude="*" ./source-dir-2016 ./target-CR2-2016

나는 사용했다이 게시물정보의 출처로.

답변2

find exec나는 다음을 사용하는 대안을 제안하고 싶습니다.cp --parents

find ./ -name *.ARW -exec cp --parents {} /home/user/target-ARW-dir/ \;
find ./ -name *.CR2 -exec cp --parents {} /home/user/target-CR2-dir/ \;

이에 대한 제한은 작업 디렉터리가 복사하려는 파일 구조 위에 있어야 한다는 것입니다.


그것이 무엇을 하는지에 대한 아이디어:

find파일 찾기

./찾을 디렉토리

-name *.ARW.ARW로 끝나는 파일만 나열

-exec반환된 파일 목록에서 명령을 실행합니다.

cp --parents디렉터리 구조 복사 및 유지 관리

{}파일별 보고서로 확장하면 다음 과 같이 find생각됩니다 .xfor x in $files

/home/user/target-ARW-dir/단지 샘플 디렉터리이므로 실제로 원하는 디렉터리로 변경해야 합니다.

\;find -execfor 루프처럼 동작하도록 a를 종료하는 올바른 방법

답변3

cpdir 에서 a로 재귀적으로 이동한 2016다음 main에서 시작하는 2016_ARW것은 어떻습니까 ?rm *.CR2rm *.ARW

예를 들어

user:~$ ls 2016/06/03/
file_one.ARW file_two.CR2 file_three.CR2 file_four.ARW file_five.ARW
user:~$ cp -R 2016 2016_ARW
user:~$ rm 2016_ARW/06/03/*.CR2
user:~$ rm 2016/06/03/*.ARW
user:~$ ls 2016/06/03/
file_two.CR2 file_three.CR2
user:~$ ls 2016_ARW/06/03/
file_one.ARW file_four.ARW file_five.ARW

관련 정보