특수 문자가 포함된 파일을 USB FAT32에 동기화

특수 문자가 포함된 파일을 USB FAT32에 동기화

FAT32로 포맷된 USB 드라이브에 많은 수의 파일을 복사하고 싶습니다. (아쉽게도 다른 포맷으로는 포맷이 불가능합니다.)

이러한 파일 중 다수에는 이름에 :및와 같이 FAT32에서 허용하지 않는 문자가 포함되어 있습니다. 또는 를 ?사용하려고 하면 파일이 복사되지 않고 이를 알리는 오류가 보고됩니다.cprsync

소스에 있는 파일의 이름을 바꾸고 싶지 않지만 대상 USB 드라이브의 파일 이름이 어떻게 바뀌는지도 상관하지 않습니다.

목적 설명(다른 설명에도 적용됨): 이는 자동차의 MP3 플레이어용이며 소프트웨어는 FAT32만 허용합니다. 따라서 백업 목적으로는 사용되지 않습니다. 파일 이름에 이상한 문자가 나타나는 이유는 예를 들어 mp3 제목이나 아티스트 이름 때문입니다.

나는 몇 가지를 시도했습니다:

  1. rsync 옵션 --iconv. 작동하지 않는 것 같지만 올바르게 사용하지 않는 것일 수도 있습니다.
  2. rdiff-backup, 이 변환이 기본적으로 수행된다는 것을 읽었습니다. 그러나 소스 파일은 내가 따르고 싶은 심볼릭 링크(예: -Lrsync 옵션)이며 맨페이지에는 이 옵션이 없는 것 같습니다 rdiff-backup.

다른 제안이 있나요?

답변1

Rsync with --iconv는 옵션이지만 먼저 , 기타 인코딩이 FAT 파일 시스템에서 허용되는 문자를 사용하는 ?인코딩 을 정의해야 합니다.:

귀하의 사용 사례에서는 rsync의 모든 기능을 사용하지 않습니다. 이 작업은 몇 줄의 쉘 스크립트로 수행할 수 있습니다.

이는 대상에서 이전 파일을 복사 ~/Music하고 건너뛰고 및를 로 변환하는 bash 스크립트입니다 . 충돌을 감지하지 못합니다. 및 둘 다 사용하지 않는다고 가정합니다 ./media/usb99:?_foo:bar.mp3foo?bar.mp3

#!/bin/bash
set -e
shopt -s dotglob globstar
cd ~/Music
for source in **/*; 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 shopt -s dotglob globstar에서 실행됩니다 .setopt dot_glob[[ $target -ot $source ]][[ ! -e $target || $target -ot $source ]]

답변2

백업을 위해 tarball을 저장하면 됩니다. 이렇게 하면 파일 이름에 대해 걱정할 필요가 없습니다.

관련 정보