Unison을 사용하면 모든 파일을 무시하지만 하위 디렉터리는 무시하지 않는 방법은 무엇입니까?

Unison을 사용하면 모든 파일을 무시하지만 하위 디렉터리는 무시하지 않는 방법은 무엇입니까?

특정 루트의 모든 하위 디렉터리 내용을 동기화하고 싶지만 루트 자체에는 몇 개의 파일만 동기화하고 싶습니다. 그렇게 하려면 ignore지시어를 사용하는 모든 파일을 무시하고(모든 하위 디렉터리 유지) 지시어와 함께 유지하려는 몇 가지 파일을 다시 추가하고 싶습니다 ignorenot. 이를 위해 다음 두 가지를 시도했습니다.

  1. ignore = Regex ^(?!.*\/).*$내 프로필에 추가하여 슬래시가 포함된 루트 항목을 제외하는 정규식을 추가합니다 . 그러나 이로 인해 추가 설명 없이 다음과 같은 오류 메시지가 나타납니다.

    Malformed pattern "Regex ^(?!.*\/).*$"." 
    
  2. 먼저 모든 것을 무시한 ignore = Name ?*다음 슬래시가 포함된 모든 경로를 다시 추가합니다. ignorenot = Path */*이는 디렉토리를 무시하지 않는 것이 이런 방식으로 작동하지 않기 때문에 예상대로 작동하지 않았습니다.

매우 간단한 문제인 것 같지만, 머리로는 이해할 수 없습니다.

답변1

원하는 대로 정확하게 수행할 수는 없는 것 같습니다. Unison이 파일과 디렉터리를 동기화할 때 Unison은 둘 사이의 차이점을 알 수 있지만 Unison은 /사용자가 패턴 일치를 허용하는 방식으로 파일을 다르게 참조하지 않습니다(예: 디렉터리 또는 다른 항목에 접두사를 붙임). 아니면 다른 것. 예를 들어, 이름이 지정된 디렉터리 와 루트 아래에 deer이름이 지정된 파일을 동기화하는 경우 Unison은 이름이 다음과 같이 표시됩니다.philROOT

new dir  ---->      ROOT/deer
new file ---->      ROOT/phil

ROOT/deer와 를 구별할 수 없습니다 ROOT/phil. 하지만 몇 가지 제안 사항은 다음과 같습니다.

  1. path = deer각 디렉터리의 프로필에 행을 추가하여 동기화할 디렉터리를 수동으로 지정하세요 . 어쨌든 이것이 Unison을 구성하는 표준 방법이라고 생각합니다. 그런 다음 루트 디렉터리에 있는 파일 중 동기화하려는 파일(예: 이라는 이름의 파일)에 대해 다음 과 같이 동기화되는 디렉터리로 phil이동한 다음phildeer/synced-root-files/심볼릭 링크해당 파일에서 다시 루트 디렉터리로

    cd ROOT; ln -s ROOT/deer/synced-root-files/phil
    
  2. 패턴 일치를 수행할 수 있는 루트 디렉터리의 명명 규칙을 만듭니다. 예를 들어, 모든 파일의 이름을 지정하십시오.~하지 않다와 같은 것을 동기화 ignore.phil하고 Unison 프로필에 한 줄을 추가하고 싶습니다 ignore = Path ignore.*.

다음은경로 지정그리고경로 무시미래의 독자들이 쉽게 찾을 수 있도록 Unison 매뉴얼의 섹션을 참조하세요.

관련 정보