`ln`을 사용하여 누락 된 디렉토리를 작성하십시오.


10

그래서 작은 패키지 관리자를 작성하고 있는데 문제는 파일에 대한 심볼릭 링크를 만드는 것입니다.

패키지를에 설치 한 /usr/pkg/name-version다음 파일을 읽어서 어떤 심볼릭 링크를 만들지 결정합니다. 내가 사용하고 ln있는 링크를 만들기 위해, 그리고 리눅스 API 헤더를 설치하려고 할 때 문제로 실행했습니다. 헤더 파일을 포함하는 폴더가 아닌 헤더 파일 자체를 링크해야합니다 (따라서 2 개의 패키지가 포함하는 동일한 하위 디렉토리에 파일을 넣어야하는 경우 하나의 패키지를 망칠 필요가 없습니다).

그 문제는 해결되었지만 ln경로가 불완전하면 단순히 오류가 발생합니다. 패키지가 설치 될 때까지 해당 디렉토리가 없어야하기 때문에 성 가실 것입니다.

ln누락 된 디렉토리를 작성 하는 플래그가 있습니까 , 아니면 복잡한 bash 스크립트와 함께 가야합니까?


1
뭔가 빠진 것이 있지만 왜 mkdir디렉토리를 만드는 데 사용하지 않습니까?
jw013

당신은 또한 체크 아웃 할 수 있습니다 lndir.
ams

답변:


3

복잡한 bash 스크립트가 필요하지 않지만 간단한 하나의 라이너가 필요합니다. mkdir --parents디렉토리 구조가 이미 존재하는 경우 오류를 인쇄하지 않아도 모든 것을 처리합니다.

제거시 이러한 디렉토리를 처리하는 방법에주의하십시오. 따라서 다른 패키지를 중단하지 마십시오.

또한에 글을 쓰고 있으므로 마법 (shameless plug)을 bash살펴볼 수 있습니다 . 성숙하고 유연하기 때문에 수정하는 것이 더 간단 할 수도 있습니다.


웁스, 나는 그것을 C ++로 작성하고 bash를 system () 호출과 인터페이스하기 쉽다는 것을 잊어 버렸습니다. 이것이 내가 결국 한 일입니다. 감사합니다.
Chris

@Chris : system()더 쉽지는 않습니다 . 로 명령 행 인수를 올바르게 이스케이프하는 것은 매우 어렵습니다 system(). 바로 사용한다 적어도 posix_spawn()또는 fork()+exec*()배열로 명령 줄 인수를 받아들이는.
Lie Ryan

4

이 작업을 수행 할 플래그가 없습니다 ln. 디렉토리를 만드는 것은 그 일이 아닙니다.

mkdir -p foo/bar/qux만들 것 foo, foo/bar그리고 foo/bar/qux필요에 따라. 따라서 mkdir -p마지막 경로 구성 요소를 제외한 모든 것을 먼저 호출하십시오 .

내부의 다른 패키지 구성 요소에 대한 심볼릭 링크를 사용하여 디렉토리를 필요한 깊이로 작성하여 디렉토리 계층 구조를 병합하는 간단한 패키지 관리자 인 Stow를 재창조 하는 것처럼 들립니다 . 또는 아마도 Stow와 유사하지만 더 많은 사용자 정의 가능성이있는 XStow 입니다.


0

어쩌면 tar링크로 파일을 준비하는 데 도움이 수 :

find . -type l > links.txt
tar cpf links.tar --files-from links.txt

그런 다음 필요한 곳에 링크를 작성하십시오.

tar xvf links.tar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.