Temos um servidor Windows com nomes de arquivos contendo caracteres incomuns. Por exemplo, picture.jpg
(o caractere incomum está entre o e
e o .jpg
).
Montamos com mount -t cifs -o 'ro,iocharset=utf8' //server/source-share /dest-path
e iocharset=utf8
pode ser removido, isso não muda nada.
Quando usamos ls
, tudo funciona. Mas o cp / rsync e outros comandos falham nesses arquivos:
cp -r /dest-path /tmp
- > cp: cannot stat '/dest-path/picture .jpg': No such file or directory
Você pode notar que o caractere especial é exibido como um espaço.
Com o rsync, o erro é file has vanished: "/dest-path/picture .jpg"
(com espaço também).
Alguma ideia para superar esse comportamento?
UPDATE: tentou rsync -rhicov
e rsync -av
como sugerido. Nenhuma melhoria, como esperado, porque essas opções não têm nada a ver com esse problema.
rsync -av /dest-path/* \tmp
fornece o mesmo resultado ( file has vanished
)
find /dest-path -name "*.jpg" -ls
funciona corretamente.
find /dest-path -print0 | rsync -av --files-from=- --from0 ./ /tmp
fornece erro rsync: link_stat "/dest-path/picture .jpg" failed: No such file or directory (2)
Apenas testei tar czf archive.tgz /dest-path
: error File removed before we read it
BEWARE: ls
e find
exibem os nomes dos arquivos, mas os caracteres especiais são exibidos como espaços (acabei de verificar com um editor hexadecimal). Alguns outros caracteres especiais são tratados corretamente e funcionam corretamente com o rsync.
Então, isso pode ser um problema dentro do módulo CIFS.