Intereting Posts
как я могу подключить свой рабочий стол к ноутбуку? Ошеломление задержки аутентификации при неудачных `su` или` sudo` Безопасное изменение размеров разделов Debian? Etekcity Scroll E1 Беспроводная мышь USB не работает с Ubuntu 14.04 Двойная загрузка Mint / Windows: потеряна 8 ГБ на стороне Windows Fish-Shell не сохранит мои псевдонимы Интерпретация восьмеричного дампа без параметров Docker – сила использования AUFS вместо BTRFS Каков надлежащий способ совместного использования подкаталога / usr? denyhosts блокирует доступ существующих пользователей от неизвестных (новых) IP-адресов Есть ли способ точно указать, к каким файлам обращается команда? Освобождение initramfs ram после переключения root при использовании overlayfs? Программа для отображения нажатий клавиш (ярлыков) на дисплее Почему конфигурация конфигурации сервера NVIDIA X не сохраняется при перезагрузке? Безопасно ли выполнять эти инструкции в качестве пользователя root?

Rsyncing файлы со специальными символами на USB FAT32

Я хочу скопировать большое количество файлов на USB-накопитель, который отформатирован FAT32 (и, к сожалению, его нельзя отформатировать).

Многие из этих файлов имеют имена с такими символами, как : и ? что FAT32 не позволяет. Пытаясь использовать cp или rsync , эти файлы не копируются и сообщается об ошибке.

Я не хочу переименовывать файлы в исходном коде, но мне также все равно, что файлы переименованы на целевой USB-диск.

Разъяснение цели (применимо и к другим комментариям): это для mp3-плеера в автомобиле, и программное обеспечение разрешает только FAT32. Так что это не для целей резервного копирования. И причины, по которым имена файлов имеют странные символы, – это потому, что они, например, названия mp3-файлов или имена артистов.

Я пробовал пару вещей:

  1. --iconv rsync --iconv . Это, похоже, не работает, но, возможно, я не использовал его правильно.
  2. rdiff-backup , который я прочитал, делает это преобразование по умолчанию. Однако исходные файлы представляют собой символические ссылки, которые я хочу использовать (например, параметр -s rsync -L ), и из manpages не кажется, что это rdiff-backup имеет этот параметр.

Любые другие предложения?

Rsync с --iconv будет вариантом, но сначала вам нужно определить кодировку где ? , : и другие кодируются символами, разрешенными для файловых систем FAT.

Для вашего случая использования вы не используете для этого всю силу rsync. Эта задача может быть выполнена в нескольких строках сценария оболочки.

Вот сценарий bash, который копирует ~/Music to /media/usb99 , пропуская файлы, которые старше на цель, и преобразует : и ? to _ . Он не обнаруживает столкновения (я полагаю, у вас нет обоих 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 ]] [[ ! -e $target || $target -ot $source ]] [[ ! -e $target || $target -ot $source ]] .

Если он предназначен для резервного копирования, просто спрячьте архив. Никакое имя файла не так.