전체 디렉토리를 복사하는 설치 명령에 문제가 있습니다.

전체 디렉토리를 복사하는 설치 명령에 문제가 있습니다.

그래서 나는 내 내용 중 일부를 포함하는 저장소를 가지고 있습니다.구성 파일makefile내 홈 디렉토리에 설치하기 위해 하나를 만들려고 합니다 . 내가 겪고있는 문제는 bash에서 직접 다음 명령을 실행할 때입니다.

install -m 755 -d ~/path/to/dotfilesDir/ ~/

아무 일도 일어나지 않는 것 같아요

install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/

예상대로 작동합니다.

첫 번째(더 간단하고 깔끔한) 솔루션이 작동하지 않는 이유는 무엇입니까?

답변1

@Joseph R.의 답변부터 시작하여 그의 명령을 작동시킬 수 없었기 때문에 find와 함께 작동하도록 하는 솔루션은 다음과 같습니다. (그렇지 않다고 생각합니다. 규칙이 적용되기 때문입니다 \+. 요소 뒤에는 아무것도 올 수 없습니다 {}.) (댓글을 달 수 없습니다. 실제로 전체 단락이 삭제될 수 있습니다.)

모든 파일을 정확히 동일한 디렉터리(여기 target/directory)에 복사하려면 다음을 수행하세요.

find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;

-D필수는 아니며 대상이 존재하지 않는 디렉터리만 생성됩니다.

현재 위치에서 시작하여 전체 디렉터리 계층 구조와 해당 파일을 복사하려면(빈 디렉터리는 생략됨):

find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;

이전에 언급한 것처럼 이렇게 하면 처음부터 트리가 다시 생성됩니다 $PWD. 또한 빈 디렉터리를 복사해야 하는 경우 -type dof 및 를 사용하는 find방법을 찾을 수 있습니다 install -d.

따라서 트리를 복사하려면 다음 디렉토리에서 시작하십시오 $PWD.

(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)

어떻게 parent/directory복사되지 않는지 확인하세요.

추가의

를 사용하는 경우 shell/fish다음 줄은 동일한 작업을 수행합니다.

fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'

답변2

한눈에매뉴얼 페이지, install당신이 원하는 것을 하지 않는 것 같습니다.

실제로 요약 섹션에서는 다음 형식의 사용법을 나타냅니다.

install [OPTION]... -d DIRECTORY...

나중에 매뉴얼 페이지에는 다음과 같이 나와 있습니다.

-d, --directory
모든 인수를 디렉터리 이름으로 처리하여 지정된 디렉터리의 모든 구성 요소를 만듭니다.

그래서 제 생각에는 이 옵션의 핵심은 복잡한(그러나 비어 있는) 디렉토리 구조를 설치할 수 있다는 것입니다 mkdir -p ....

루프를 사용하여 원하는 것을 달성할 수 있습니다.

for file in /path/to/DotFiles/dir/*;do
    install -m 755 "$file" ~/
done

또는 아래에 여러 수준이 있는 경우 다음을 /path/to/DotFiles/dir사용할 수 있습니다 find.

find /path/to/DotFiles/dir/ -type f -exec 'install -m 755 "{}" ~/' +

답변3

src 폴더와 그 안의 파일을 dst에 복사했지만 설치가 재귀 폴더 복사를 지원하지 않는 것 같습니다.

install -D src/* -t dst

관련 정보