FAT32로 포맷된 USB 드라이브에 많은 수의 파일을 복사하고 싶습니다. (아쉽게도 다른 포맷으로는 포맷이 불가능합니다.)
이러한 파일 중 다수에는 이름에 :
및와 같이 FAT32에서 허용하지 않는 문자가 포함되어 있습니다. 또는 를 ?
사용하려고 하면 파일이 복사되지 않고 이를 알리는 오류가 보고됩니다.cp
rsync
소스에 있는 파일의 이름을 바꾸고 싶지 않지만 대상 USB 드라이브의 파일 이름이 어떻게 바뀌는지도 상관하지 않습니다.
목적 설명(다른 설명에도 적용됨): 이는 자동차의 MP3 플레이어용이며 소프트웨어는 FAT32만 허용합니다. 따라서 백업 목적으로는 사용되지 않습니다. 파일 이름에 이상한 문자가 나타나는 이유는 예를 들어 mp3 제목이나 아티스트 이름 때문입니다.
나는 몇 가지를 시도했습니다:
- rsync 옵션
--iconv
. 작동하지 않는 것 같지만 올바르게 사용하지 않는 것일 수도 있습니다. rdiff-backup
, 이 변환이 기본적으로 수행된다는 것을 읽었습니다. 그러나 소스 파일은 내가 따르고 싶은 심볼릭 링크(예:-L
rsync 옵션)이며 맨페이지에는 이 옵션이 없는 것 같습니다rdiff-backup
.
다른 제안이 있나요?
답변1
Rsync with --iconv
는 옵션이지만 먼저 , 기타 인코딩이 FAT 파일 시스템에서 허용되는 문자를 사용하는 ?
인코딩 을 정의해야 합니다.:
귀하의 사용 사례에서는 rsync의 모든 기능을 사용하지 않습니다. 이 작업은 몇 줄의 쉘 스크립트로 수행할 수 있습니다.
이는 대상에서 이전 파일을 복사 ~/Music
하고 건너뛰고 및를 로 변환하는 bash 스크립트입니다 . 충돌을 감지하지 못합니다. 및 둘 다 사용하지 않는다고 가정합니다 ./media/usb99
:
?
_
foo:bar.mp3
foo?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을 저장하면 됩니다. 이렇게 하면 파일 이름에 대해 걱정할 필요가 없습니다.