USB 키를 재 동기화 할 때 콜론을 어떻게 대체 할 수 있습니까?


12

메일 디렉토리를 USB 키로 백업하고 싶습니다. 그러나 내 IMAP에는 콜론 (:) 문자를 포함하는 이상한 명명 규칙이 있습니다. USB가 창 형식이므로 rsync가 해당 파일을 작성하지 못합니다. rsync를 실행할 때 콜론 문자를 밑줄로 바꾸는 방법이 있습니까? (또는 다른 도구와 동일한 동기화를 수행 하시겠습니까?)

내가 주석에서 명확히 한 몇 가지 점 :

  • 이것은 최악의 시나리오 백업이므로 아무것도 설치하지 않고 Windows 시스템에서 읽을 수 있기를 원합니다.
  • 일정하게 유지되는 많은 데이터가 있습니다. 따라서 최신 파일을 복사하는 도구가 있으면 많은 시간을 절약 할 수 있습니다.
  • rsync를 다시 작성하지 않습니다. 즉시 사용할 수있는 기존 도구를 찾고 있습니다.

감사

답변:


8

일반 rsync 대신 rdiff-backup을 사용하십시오 . 대상 디스크에서 지원되지 않는 문자를 자동으로 감지하고 대체하며, unix 파일 시스템으로 복원 할 때와 같이 다시 넣습니다. 원본과 하나의 추가 메타 데이터 디렉토리처럼 보이는 압축 해제 된 디렉토리를 생성합니다.


6

가장 간단한 방법은 파일 시스템 계층을 활용하여 파일 이름을 변환하는 것입니다. Ubuntu 12.04부터는 파일 이름을 Windows VFAT가 지원하는 이름으로 fuse-posixovl 로 변환 하는 FUSE 파일 시스템이 있습니다. 퓨즈 -POSIXOVL 설치

sudo mount.posixovl /media/sdb1
chown guillaume /media/sdb1
rsync -au ~/mail /media/sbd1/

또는 루트 액세스가 필요하지 않도록 :

mkdir ~/mnt
/sbin/mount.posixovl -S /media/sdb1 ~/mnt
rsync -au ~/mail ~/mnt/

VFAT가 동의하지 않는 파일 이름의 문자는 다음과 같이 인코딩 된 %(XX)XX진수 자리입니다. POSIXovl 1.2.20120215부터는 같은 파일 이름 %(3A)이 그 자체로 인코딩되고로 디코딩 :되므로 형식의 하위 문자열을 포함하는 파일 이름이 있으면 충돌의 위험이 있습니다 %(XX).

POSIXovl이 너무 긴 파일 이름을 처리하지 않도록주의하십시오. 인코딩 된 이름이 255 자에 맞지 않으면 파일을 저장할 수 없습니다.

POSIXovl은라는 파일에 유닉스 권한과 소유권을 저장합니다 .pxovl.FILENAME.


다음 bash ≥4 스크립트 는의 모든 파일에 복사 ~/mail/foo:bar합니다 . 대상 트리에 이미 존재하고 소스보다 오래된 파일은 건너 뜁니다./media/usb99/mail/foo_bar~/mail

#!/bin/bash
set -e
shopt -s dotglob globstar
for source in "$HOME"/mail/**/*; do
  target=/media/usb99/${source#"$HOME"/}
  target=${target//:/_}
  if [[ -d $source ]]; then
    mkdir -p -- "$target"
  elif [[ $target -ot $source ]]; then
    cp -p -- "$source" "$target"
  fi
done

이 스크립트는 zsh에서 약간만 수정하여 작동합니다 : replace shopt -s dotglob globstarby setopt dot_globand [[ $target -ot $source ]]by [[ ! -e $target || $target -ot $source ]].


다음은 zsh 2 라이너입니다 (오토로드를 세면 3 개). 짧지 만 상당히 진보되어 있으며 읽기 쉽지 않습니다.

autoload zargs zmv
zargs -- ~/mail/**/*(/e\''REPLY=/media/usb99/${${REPLY#$HOME/}//:/_}'\') -- mkdir -p --
zmv -C -Q -o -pu '~/mail/(**/)(*)(.)' '/media/usb99/mail/${1//:/_}${2//:/_}'
  • zargs라인에 해당 mkdir -p ~/mail/**/*(…)디렉토리 이름의 누적 길이가 너무 긴 경우는 밖으로 폭격하지 않을 것을 제외하고. 이 줄은 필요에 따라 대상 디렉토리를 만듭니다.
  • ~/mail/**/*(/)아래의 모든 디렉토리로 확장됩니다 ~/mail( (/)끝 으로 인해 디렉토리 만 ).
  • (/e\''…'\')디렉토리에만 선택하고 '…'내의 코드를 추가로 실행하여 REPLY변수에 저장된 각 파일 이름을 변환 합니다.
  • ${${REPLY#$HOME/}//:/_}소스 디렉토리에 해당하는 접 두부를 제거하고로 변경 :합니다 _.
  • zmv -C 첫 번째 피연산자 (zsh 패턴)와 일치하는 각 파일을 두 번째 피연산자를 확장하여 얻은 파일 이름으로 복사합니다.
  • -o -pu통과 말한다 -pu받는 cp권한을 보존하고 업데이트 된 파일을 복사 할 수 있도록, 유틸리티입니다. (우리는 zsh에게 업데이트 확인을 수행하도록 지시 할 수 있습니다. 조금 더 빠르지 만 훨씬 더 암호입니다.)
  • (.)일반 파일 만 선택합니다. -Q이것은 이것이 .하위 표현식을 나타내는 괄호가 아닌 glob 한정자로 구문 분석되어야한다고 말합니다 .
  • $1$2대체 텍스트에 괄호 표현과 일치 (**/)하고 *. ( **괄호 안에 정확히 포함되어 있지 않으면 괄호 안에 있으면 0 이상의 하위 디렉토리 수준이라는 특별한 의미를 잃게됩니다 **/.)

필자는 처음 에 파일 이름 변경 기능 ( 옵션) 이있는 보관 도구 (여기서는 통과 모드에서 사용하도록 의도 된) 인 pax 를 사용하려고 생각했습니다 -s. 그러나 -sand -u옵션은 함께 작동하지 않습니다 ( paxPOSIX 정의는 말 그대로 -u변환 된 파일 이름이 아닌 대상 트리에서 동일한 이름의 파일을 검사해야 한다고 말합니다 -s. 우분투의 pax 구현은 말 그대로 사양을 따릅니다. 유용하게). 하드 링크를 사용하여 이름을 바꾼 하드 링크를 만든 다음 하드 링크 ( rsync -au또는 또는를 사용하여 pax -rw -pp -u)를 다른 미디어에 복사하는 것은 여전히 ​​가능 하지만 가치보다 문제가 많습니다.

cd ~/mail
mkdir -p /media/usb99/mail
pax -rw -l -pp -s '!:!_!g' . ../mail.colonless
rsync -au ../mail.colonless/ /media/usb99/mail/

나는 pax를 사용하려고합니다. 우분투에 필요한 패키지를 지정하여 답변을 향상시킬 수 있습니다. 일반 설치의 일부가 아닌 것 같습니다.
기 illa 코트

pax라는 단일 패키지를 추가하면 작동합니다.
기 illa 코트

아무것도 출력하지 않으며, -v 옵션을 추가하여 진행 상황을 확인하려고합니다. 매번 모든 것을 복사하는 것 같습니다. rsync의 요점은 증분이어야하므로 많은 파일 중간에 수정 된 파일이 몇 개있을 때 많은 시간을 절약 할 수 있습니다.
기 illa 코트

내가 지정한 경로 아래에 '홈'디렉토리를 만드는 것 같습니다. 스크립트에서 디렉토리를 변경하지 않는 것이 좋습니다. 모든 해당 디렉토리를 만들지 않을 가능성이 있습니까?
기 illa 코트

모든 것이 동일한 두 번째 패스에서 5 분이 걸렸습니다. rsync는 몇 초 밖에 걸리지 않았습니다. 증분으로 지정해야하는 옵션이 있습니까?
기 illa 코트

-1

USB 메모리 스틱 및 모바일 USB 디스크로 수행하는 작업은 FAT32 파티션과 ext4 파티션의 두 파티션으로 파티션을 나누는 것입니다. 첫 번째는 비 리눅스 사용자와 데이터를 교환하는 데 사용할 수 있고, 두 번째는 내 우분투 시스템과 개인적으로 사용하거나 다른 Linux 사용자와 교환하는 데 사용할 수 있습니다. ext4 파티션에는 ":"문제가 없습니다.


Windows 컴퓨터에 정보가 필요한 경우를 대비하여 어디에서나 백업을 읽을 수 있기를 원합니다. 그렇지 않다면 USB 키를 유닉스 파일 시스템으로 다시 포맷했을 것입니다. 그래서 대체를 요구하는 것입니다.
기 illa 코트

음, 이다 당신이 어떤 도구 나 파일 시스템 드라이버를 설치하면 Windows에서 적어도 EXT2 / EXT3를 읽을 수 있습니다. 모든 Windows 시스템 또는 자신의 시스템 (필요한 경우 필요한 도구를 설치할 수있는 시스템)에서만 읽을 수 있도록 하시겠습니까?
JanC

BTW : 이론 상으로는 NTFS 시스템에도 저장할 수 있어야하지만 대부분의 Windows 응용 프로그램 (Microsoft의 대부분 포함)은 NTFS를 올바르게 지원하지 않습니다 ... : P
JanC

최악의 복구 백업이므로 빠른 것이 필요한 경우 컴퓨터에 아무것도 설치할 권한이 없습니다.
기 illa 코트

-2

tar아카이브를 만드는 데 사용할 수 있습니다 . 이 방법으로 이름을 변경할 필요가 없으며 원하는 파일 시스템에 저장할 수 있습니다.


zip 파일이나 tgz로 동일한 작업을 수행 할 수 있지만 매번 변경되지 않은 파일을 다시 작성합니다. 쓰기 수가 제한된 미디어와 여러 Gib의 데이터가 있으므로 새 1kb 파일이 추가 되었기 때문에 전체 내용을 다시 쓰지 않기를 원합니다.
기 illa 코트

최근의 플래시 메모리에 대한 재기록은 일반적으로 수백만 또는 적어도 수십만으로 "제한적"이다. 많은 백업을 할 계획이 아닌 것 같습니다. ;)
JanC

2
-1 -azv는이 파일을 유지 수단 아카이브 모드 사본 속성 않으며, 아카이브를 생성하지 않습니다
주앙 핀투

sry, rsync가 그렇게 할 수 있다고 생각하고 tar로 변경했지만 tar가 증가 백업을 수행 할 수 있는지 모르겠습니다. 그러나 JanC는 옳으며 재 작성은 문제가되지 않습니다.
david

재 작성에 대한 JanC 의견에 관해서는 한계가 있다는 사실뿐만 아니라 (마지막으로 확인한 시간은 천에서 백만에 가까웠다)뿐만 아니라 몇 시간을 기다리는 것을 좋아하지 않는다는 사실입니다. 1 분 미만이어야합니다.
기 illa 코트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.