![ln을 사용하여 누락된 디렉터리 만들기](https://linux55.com/image/23656/ln%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%88%84%EB%9D%BD%EB%90%9C%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EB%A7%8C%EB%93%A4%EA%B8%B0.png)
그래서 저는 작은 패키지 관리자를 작성하고 있는데 한 가지 문제는 파일에 대한 심볼릭 링크를 만드는 것입니다.
패키지를 설치한 /usr/pkg/name-version
다음 파일을 읽어 어떤 심볼릭 링크를 생성할지 결정합니다. 링크를 구축하는 데 이를 사용하고 ln
있는데 Linux API 헤더를 설치하는 데 문제가 있습니다. 헤더 파일을 포함하는 폴더가 아닌 헤더 파일 자체를 연결해야 합니다. 따라서 두 패키지가 동일한 include 하위 디렉터리에 파일을 넣어야 하는 경우 그 중 하나를 망칠 필요가 없습니다.
문제를 해결했지만 ln
경로가 불완전하면 오류가 발생합니다. 이는 패키지를 설치하기 전에 이러한 디렉터리가 존재해서는 안 되기 때문에 짜증나는 일입니다.
누락된 디렉토리를 생성하는 플래그가 있습니까 ln
? 아니면 복잡한 bash 스크립트를 사용해야 합니까?
답변1
이를 수행할 플래그가 없습니다 ln
. 디렉토리를 만드는 것은 그 일이 아닙니다.
mkdir -p foo/bar/qux
필요 에 따라 생성됩니다 foo
. 따라서 마지막 경로 구성 요소를 제외한 모든 경로 구성 요소가 먼저 호출됩니다.foo/bar
foo/bar/qux
mkdir -p
바퀴를 재발명하는 것 같군요 집어 챙겨 넣다, 원하는 깊이의 디렉터리를 생성하고 내부의 다양한 패키지 구성 요소에 대한 기호 링크를 사용하여 디렉터리 계층을 병합하는 간단한 패키지 관리자입니다. 아마도X스토우, 이는 Stow와 유사하지만 더 많은 사용자 정의 가능성이 있습니다.
답변2
복잡한 bash 스크립트가 필요하지 않고 간단한 한 줄의 코드만 있으면 됩니다. mkdir --parents
모든 것을 처리하고 디렉토리 구조가 이미 존재하는 경우 오류를 인쇄하지도 않습니다.
다른 패키지가 손상되지 않도록 제거할 때 이러한 디렉터리를 처리하는 방법에 주의하세요.
또한, 당신이 쓴 이후로 bash
, 당신은 볼 수 있습니다요술(뻔뻔한 플러그). 성숙하고 유연하기 때문에 수정하는 것이 더 간단할 수도 있습니다.
답변3
tar
링크가 포함된 파일을 준비하는 것이 도움이 될 수 있습니다 .
find . -type l > links.txt
tar cpf links.tar --files-from links.txt
그런 다음 필요한 곳에 링크를 만듭니다.
tar xvf links.tar