폴더 구조를 유지하면서 특정 파일 형식 복사

폴더 구조를 유지하면서 특정 파일 형식 복사

폴더 전체에 *.csv 파일이 흩어져 있는 폴더 구조가 있습니다. 이제 폴더 구조를 유지하면서 모든 *.csv 파일을 다른 대상으로 복사하고 싶습니다.

작동 방식은 다음과 같습니다.

cp --parents *.csv /target
cp --parents */*.csv" /target
cp --parents */*/*.csv /target
cp --parents */*/*/*.csv /target
...

등등. 하지만 명령을 사용하고 싶습니다.

답변1

find매우 편리한 옵션이 있습니다 -exec.

find . -name '*.csv' -exec cp --parents \{\} /target \;

답변2

rsync이 목적 으로도 사용할 수 있습니다 .

$ rsync -a --prune-empty-dirs --include '*/' --include '*.csv' --exclude '*' source/ target/

소스 트리에서 빈 디렉터리를 유지하려면 이 --prune-empty-dirs옵션을 건너뛰세요.

$ rsync -a --include '*/' --include '*.csv' --exclude '*' source/ target/

당신이 그렇게한다면아니요심볼릭 링크, 수정 날짜, 파일 권한, 소유자 등을 유지하려면 ;-) -a로 바꾸십시오.-rlptgoD

답변3

당신은 그것을 사용할 수 있습니다찾다그리고CPIO통과 모드에서

find . -name '*.csv' | cpio -pdm  /target

그러면 현재 디렉터리와 그 아래 디렉터리에서 모든 .csv 파일을 찾아 /target에 복사하고 .csv 루트 디렉터리 구조를 유지합니다 ..

당신이 사용하는 경우

find /path/to/files -name '*.csv' | cpio -pdm /target

및 아래의 모든 파일을 찾아서 아래 /path/to/files에 복사합니다 ./target/path/to/files

답변4

이것은 나에게 효과적입니다.

find -name "*.csv" | xargs cp --parents -t /target

파일 이름에 공백이 있으면 옵션을 추가 -print0하고 -0설명 중 하나에 제안된 대로 수행하십시오.

find -name "*.csv" -print0 | xargs -0 cp --parents -t /target

관련 정보