단일 파일을 트리 구조의 가장 깊은 하위 디렉터리 모두에 복사하려고 합니다. 다음과 같다고 상상해 보세요.
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
-links
exec
find . -exec echo X{}X \; -type d -links 2 -exec echo Y{}Y \;
두 파일 사이에 모든 파일이 나열되지만 두 파일 사이에 올바른 파일 만 X
나열되는 것을 볼 수 있습니다 . 이는 중간 디렉터리에도 나타나는 이유를 설명합니다 .dir{3,5,7}
Y
bar
또한 이 -r
옵션은 재귀 복사를 활성화합니다. 복사되는 내용은 일반 파일( bar
) 이므로 -r
필요하지 않습니다.
답변2
당신은 그것을 사용할 수 있습니다 :
find . -type d -links 2 -exec cp file {} \;
2개의 하드 링크가 있는 디렉터리를 찾은 다음 파일을 해당 특정 디렉터리에 복사합니다.