![Unison을 사용하면 모든 파일을 무시하지만 하위 디렉터리는 무시하지 않는 방법은 무엇입니까?](https://rvso.com/image/1568326/Unison%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%A9%B4%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%AC%B4%EC%8B%9C%ED%95%98%EC%A7%80%EB%A7%8C%20%ED%95%98%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%8A%94%20%EB%AC%B4%EC%8B%9C%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
특정 루트의 모든 하위 디렉터리 내용을 동기화하고 싶지만 루트 자체에는 몇 개의 파일만 동기화하고 싶습니다. 그렇게 하려면 ignore
지시어를 사용하는 모든 파일을 무시하고(모든 하위 디렉터리 유지) 지시어와 함께 유지하려는 몇 가지 파일을 다시 추가하고 싶습니다 ignorenot
. 이를 위해 다음 두 가지를 시도했습니다.
ignore = Regex ^(?!.*\/).*$
내 프로필에 추가하여 슬래시가 포함된 루트 항목을 제외하는 정규식을 추가합니다 . 그러나 이로 인해 추가 설명 없이 다음과 같은 오류 메시지가 나타납니다.Malformed pattern "Regex ^(?!.*\/).*$"."
먼저 모든 것을 무시한
ignore = Name ?*
다음 슬래시가 포함된 모든 경로를 다시 추가합니다.ignorenot = Path */*
이는 디렉토리를 무시하지 않는 것이 이런 방식으로 작동하지 않기 때문에 예상대로 작동하지 않았습니다.
매우 간단한 문제인 것 같지만, 머리로는 이해할 수 없습니다.
답변1
원하는 대로 정확하게 수행할 수는 없는 것 같습니다. Unison이 파일과 디렉터리를 동기화할 때 Unison은 둘 사이의 차이점을 알 수 있지만 Unison은 /
사용자가 패턴 일치를 허용하는 방식으로 파일을 다르게 참조하지 않습니다(예: 디렉터리 또는 다른 항목에 접두사를 붙임). 아니면 다른 것. 예를 들어, 이름이 지정된 디렉터리 와 루트 아래에 deer
이름이 지정된 파일을 동기화하는 경우 Unison은 이름이 다음과 같이 표시됩니다.phil
ROOT
new dir ----> ROOT/deer
new file ----> ROOT/phil
ROOT/deer
와 를 구별할 수 없습니다 ROOT/phil
. 하지만 몇 가지 제안 사항은 다음과 같습니다.
path = deer
각 디렉터리의 프로필에 행을 추가하여 동기화할 디렉터리를 수동으로 지정하세요 . 어쨌든 이것이 Unison을 구성하는 표준 방법이라고 생각합니다. 그런 다음 루트 디렉터리에 있는 파일 중 동기화하려는 파일(예: 이라는 이름의 파일)에 대해 다음 과 같이 동기화되는 디렉터리로phil
이동한 다음phil
deer/synced-root-files/
심볼릭 링크해당 파일에서 다시 루트 디렉터리로cd ROOT; ln -s ROOT/deer/synced-root-files/phil
패턴 일치를 수행할 수 있는 루트 디렉터리의 명명 규칙을 만듭니다. 예를 들어, 모든 파일의 이름을 지정하십시오.~하지 않다와 같은 것을 동기화
ignore.phil
하고 Unison 프로필에 한 줄을 추가하고 싶습니다ignore = Path ignore.*
.
다음은경로 지정그리고경로 무시미래의 독자들이 쉽게 찾을 수 있도록 Unison 매뉴얼의 섹션을 참조하세요.