rsync 제외 패턴을 명시적 파일 목록으로 변환

rsync 제외 패턴을 명시적 파일 목록으로 변환

rsync합리적인 백업을 위해 유지 관리하는 긴 제외 패턴 목록을 명시적인 파일 및 디렉터리 이름 목록으로 변환할 수 있는 방법이 있는지 알아보려고 합니다 .

애플리케이션은 다른 애플리케이션에 대해 동일한 목록을 사용하려고 하는 곳입니다(패턴을 추가하거나 제거하여 업데이트할 때마다)( mksquashfs). 두 도구 모두 한 줄에 하나의 항목이 있는 명시적인 파일 목록을 제외 목록으로 지정할 수 있지만 패턴 구문은 세부적으로 다릅니다.

변환할 목록은 와일드카드를 포함하여 rsync. 에서 허용하는 모든 유형의 패턴으로 구성되어 있다고 가정할 수 있습니다.

두 가지 접근 방식을 생각해 볼 수 있습니다.

  1. rsync후크 아래에서 무엇이 사용되고 있는지 알아보세요 (단순한 쉘 글로빙도 아닌 것 같습니다 find).
  2. rsync자세한 출력으로 더미 전송을 수행하여 목록을 생성하는 데 사용됩니다 --dry-run(여기에서는 제외된 파일의 이름을 인쇄하는 방법을 모르겠습니다).

답변1

다음과 같습니다. 여기서는 "${other_opts[@]}"일반적인 rsync 매개변수를 나타냅니다.

rsync --dry-run --debug=FILTER  "${other_opts[@]}" /proc/$$/no-such-dir/

제외된 모든 파일을 인쇄해야 합니다.

[sender] hiding file .bash_history-27611.tmp because of pattern *.tmp
[sender] hiding file .bash_history-21217.tmp because of pattern *.tmp
[sender] hiding file .bash_history-29735.tmp because of pattern *.tmp
[sender] hiding file .bash_history-20437.tmp because of pattern *.tmp

sed를 사용하여 잘라낼 수 있습니다.

sed '/^\[sender\] hiding file .* because of / {
  s/^\[sender\] hiding file \(.*\) because of .*/\1/
  p
  }
d '

그러나 제어 문자가 포함된 파일 이름을 발견하면 이 문제가 발생할 수 있습니다.

관련 정보