전체 디렉토리를 복사하기위한 설치 명령 문제


16

그래서 일부 구성 파일 이있는 저장소를 가지고 있으며 makefilehomedir에 설치 하기 위해 파일 을 만들려고합니다 . 내가 가진 문제는 bash에서 다음 명령을 바로 실행할 때입니다.

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

겉으로는 아무 일도 일어나지 않습니다

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

의도 한대로 작동합니다.

첫 번째 (더 쉽고 깨끗한) 솔루션이 작동하지 않는 이유는 무엇입니까?



방금 cp를 -r과 함께 사용했습니다. 나는 왜 설치에 cp와 같은 -r 옵션이 없는지 이해하지 못한다.
ibrahim

답변:


7

맨 페이지를 보면install 원하는 것을 수행하지 못하는 것 같습니다 .

실제로, Synopsis 섹션은 다음 형식의 사용법을 나타냅니다.

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 "{}" ~/' +

지정된 디렉토리의 모든 구성 요소 작성 = 파일이 아닌 서브 디렉토리 작성?
nathdwek

@nathdwek 맞습니다. 이 방법을 사용하면 다음을 사용하여 홈 디렉토리 아래에 복잡한 (골격) 디렉토리 구조를 만들 수 있습니다.install -m 755 -d ~/foo/bar/baz
Joseph R.

1
-exec 'install -m 755 "{}" ~/' +적어도 특정 (모든? 대부분?) 버전의 Linux에서는 작동하지 않습니다. OSX 등에서 작동 할 수 있습니다. oneliner를 원한다면 이와 같은 것을 사용하는 것이 매우 간단합니다. 1. 디렉토리 재귀 for d in $(find . -type d); do install -d --mode 755 "$d" "../install-test/$d"; done생성 : 2. 재귀 파일 생성 :for f in $(find . -type f); do install -D --mode 644 "$f" ../install-test/; done
Josh M.

6

@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 dfindinstall -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/{}" \\;'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.