find, exec 및 cp를 사용하여 디렉토리 경로를 유지하면서 특정 파일 복사

find, exec 및 cp를 사용하여 디렉토리 경로를 유지하면서 특정 파일 복사

빈 텍스트 파일로 다음 폴더를 설정했습니다.

1/a.txt
2/b.txt

디렉토리 구조를 유지하면서 txt 파일만 다른 디렉토리에 복사하고 싶습니다. 그래서 다음 명령을 시도했습니다.

mkdir -p temp/s;
find ./ -name '*txt' -exec cp --parents '{}' ./temp/s \;

이제 현재 디렉터리에 다음 파일이 표시됩니다.

1/a.txt
2/b.txt
temp/s/1/a.txt
temp/s/2/b.txt
temp/s/temp/s/2/b.txt

마지막 줄이 왜 발생했는지 이해할 수 없습니다 temp/s/temp/s/2/b.txt. 왜 이런 일이 발생했는지, temp다른 명령 내에 중첩되지 않은 명령을 수정하는 방법을 설명할 수 있는 사람이 있습니까 temp?

제가 예상했던 최종 결과는 다음과 같습니다.

1/a.txt
2/b.txt
temp/s/1/a.txt
temp/s/2/b.txt

답변1

당신은경쟁 조건: 은 (는) 의 검색 경로 temp/s에 있으므로 파일을 나열하고, 생성된 은 (는) 새 파일을 추가하고 있습니다.findfindcp

다음을 실행하는 동안 하위 디렉터리를 제외해야 합니다 find.

find . -path ./temp/s -prune -o -name '*txt' -exec cp --parents '{}' ./temp/s \;

\;로 바꾸면 +훨씬 적은 수의 프로세스가 생성됩니다 cp.

관련 정보