폴더 전체에 *.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
답변4
이것은 나에게 효과적입니다.
find -name "*.csv" | xargs cp --parents -t /target
파일 이름에 공백이 있으면 옵션을 추가 -print0
하고 -0
설명 중 하나에 제안된 대로 수행하십시오.
find -name "*.csv" -print0 | xargs -0 cp --parents -t /target