
빈 텍스트 파일로 다음 폴더를 설정했습니다.
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
.