가장 깊은 모든 하위 디렉터리에 파일을 반복적으로 복사합니다.

가장 깊은 모든 하위 디렉터리에 파일을 반복적으로 복사합니다.

단일 파일을 트리 구조의 가장 깊은 하위 디렉터리 모두에 복사하려고 합니다. 다음과 같다고 상상해 보세요.

bar
dir1
 |  |
 |  +--dir2
 |    |
 |    +--dir3
 |  +--dir4
 |    |
 |    +--dir5
 |  +--dir6
 |    |
 |    +--dir7

다음과 같이 "bar"를 가장 깊은 하위 디렉터리에만 복사하고 싶습니다.

bar
dir1
 | +--dir2
 |   |
 |    +--dir3
 |     | 
 |     +-- bar
 | +--dir4
 |   |
 |   +--dir5
 |     | 
 |     +-- bar
 | +--dir6
 |   |
 |   +--dir7
 |     | 
 |     +-- bar

파일이 때때로 중간 디렉터리에 나타나기 때문에 이 문제를 해결하는 방법을 모르지만 가장 깊은 하위 디렉터리를 대상으로 하는 방법을 찾을 수 없습니다.

편집: 나는 이 문제를 해결하려고 노력했습니다. 어떤 이유로 가장 깊은 디렉토리뿐만 아니라 모든 디렉토리에 일관되지 않게 복사됩니다.

find . -exec cp -r bar {} \; -type d -links 2

답변1

bar해결 방법 : 포함된 디렉터리에서

find . -type d -links 2 -exec cp bar {} \;

첫 번째 시도

find . -exec cp -r bar {} \; -type d -links 2

구문 오류가 없지만 동작이 예상한 것과 다릅니다. 필터는 및 필터 앞에 -exec오기 때문에 필터는 적용되지 않으며 일반 파일뿐만 아니라 디렉터리도 포함하여 현재 디렉터리 아래의 모든 항목을 가져옵니다. 믿을 수 없다면 출력을 확인해 보세요.-type-linksexec

find . -exec echo X{}X \; -type d -links 2 -exec echo Y{}Y \;

두 파일 사이에 모든 파일이 나열되지만 두 파일 사이에 올바른 파일 만 X나열되는 것을 볼 수 있습니다 . 이는 중간 디렉터리에도 나타나는 이유를 설명합니다 .dir{3,5,7}Ybar

또한 이 -r옵션은 재귀 복사를 활성화합니다. 복사되는 내용은 일반 파일( bar) 이므로 -r필요하지 않습니다.

답변2

당신은 그것을 사용할 수 있습니다 :

find . -type d -links 2 -exec cp  file  {} \;

2개의 하드 링크가 있는 디렉터리를 찾은 다음 파일을 해당 특정 디렉터리에 복사합니다.

관련 정보