![find, exec 및 cp를 사용하여 디렉토리 경로를 유지하면서 특정 파일 복사](https://rvso.com/image/747354/find%2C%20exec%20%EB%B0%8F%20cp%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EC%9C%A0%EC%A7%80%ED%95%98%EB%A9%B4%EC%84%9C%20%ED%8A%B9%EC%A0%95%20%ED%8C%8C%EC%9D%BC%20%EB%B3%B5%EC%82%AC.png)
빈 텍스트 파일로 다음 폴더를 설정했습니다.
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
에 있으므로 파일을 나열하고, 생성된 은 (는) 새 파일을 추가하고 있습니다.find
find
cp
다음을 실행하는 동안 하위 디렉터리를 제외해야 합니다 find
.
find . -path ./temp/s -prune -o -name '*txt' -exec cp --parents '{}' ./temp/s \;
\;
로 바꾸면 +
훨씬 적은 수의 프로세스가 생성됩니다 cp
.