Як я можу замінити колонки, коли я rsync на USB-клавіші?


12

Я хотів би створити резервну копію свого електронного каталогу на USB-ключі. Однак мій IMAP має дивну умову іменування, що щось включає двокрапку (:). Оскільки USB знаходиться у віконному форматі, rsync не зможе створити цей файл. Чи є спосіб замінити символ двокрапки на підкреслення під час запуску rsync? (Або зробити таку ж синхронізацію з іншим інструментом?)

Лише кілька моментів, які я уточнив у коментарях:

  • Це найгірший варіант резервного копіювання сценарію , я хотів би мати можливість прочитати його на машині Windows, не встановлюючи нічого.
  • Я отримав багато даних, які залишаються постійними. Тому я економлю багато часу, якщо у мене є інструмент, який просто копіює новіші файли.
  • Я не шукаю перепису rsync. Я шукаю наявний інструмент, який можна використовувати поза коробкою.

Дякую

Відповіді:


8

Використовуйте rdiff-резервне копіювання замість простого rsync. Він автоматично виявить та замінить символи, які не підтримуються на цільовому диску, а також поверне їх такими, якими вони були під час відновлення до файлової системи Unix. Він створює розпакований каталог, схожий на початкове джерело плюс один додатковий каталог метаданих.


6

Найпростіший підхід - використовувати шар файлової системи для трансформації імен файлів. Починаючи з Ubuntu 12.04, існує файлова система FUSE, яка перетворює імена файлів в імена, які VFAT Windows підтримує: fuse-posixovl Встановіть запобіжник-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, майте на увазі, що ім’я файлу like %(3A)кодується як саме, і буде розшифроване як :, тому існує ризик зіткнення, якщо у вас є імена файлів, що містять підрядки форми %(XX).

Слідкуйте за тим, щоб POSIXovl не справлявся із занадто довгими іменами файлів. Якщо закодоване ім'я не вміщує 255 символів, файл не може бути збережений.

POSIXovl зберігає дозволи Unix та права власності у файлах, що називаються .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 з незначними модифікаціями: замінити shopt -s dotglob globstarна setopt dot_globі [[ $target -ot $source ]]на [[ ! -e $target || $target -ot $source ]].


Ось zsh-вкладиш zsh (три, якщо рахувати автозавантаження). Він коротший, але досить вдосконалений і не дуже читабельний.

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 візерунок) до імені файлу, отриманого шляхом розширенняg другого операнда.
  • -o -puкаже перейти -puна cpутиліту, щоб зберегти дозволи та скопіювати лише оновлені файли. (Ми могли б сказати zsh здійснити перевірку оновлення; це було б трохи швидше, але ще більш виразно.)
  • (.)вибирає лише звичайні файли. -Qговорить, що це слід аналізувати як глобальний класифікатор, а не як .круглі дужки навколо нього, що вказує на піддекспресію.
  • $1а $2в тексті заміни відповідають збіг у дужках (**/)і *. ( **втрачає своє особливе значення як нульовий або більше рівнів підкаталогів, якщо він знаходиться в дужках, якщо дужки не містять точно **/.)

Спочатку я думав використовувати pax , який є інструментом архівування (тут призначений для використання в режимі проходження), який має функцію перейменування файлів (його -sопція). Однак -sі -uпараметри не працюють разом ( визначення POSIX pax буквально говорить про те, що -uнеобхідно перевірити файл з тим самим іменем у дереві призначення, а не ім'я файлу, перетворене -s; реалізація pax в Ubuntu дотримується специфікації буквально, а не корисно). Ще можна скористатися ним, щоб зробити перейменовані жорсткі посилання, а потім скопіювати жорсткі посилання (з 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. Можливо, ви могли б покращити свою відповідь, вказавши пакет, необхідний для ubuntu. Це не здається частиною звичайної установки.
Гійом Коте

Просто додавання одного пакету під назвою pax змушує його працювати.
Гійом Коте

Він нічого не видає, я намагаюся додати опцію -v, щоб побачити, що відбувається. Здається, кожен раз копіює все. Сенс rsync полягає в поступовому збільшенні, що змусило заощадити багато часу, коли у мене просто кілька модифікованих файлів посеред багатьох файлів.
Гійом Коте

Здається, це створює домашній каталог під вказаним нами шляхом. Рекомендується уникати зміни каталогу в скрипті, чи є інша можливість уникнути створення всіх цих каталогів?
Гійом Коте

На секунду пройшло п'ять хвилин, де все було ідентично. rsync зайняв би лише кілька секунд. Чи є варіант, який потрібно вказати, щоб зробити його поступовим?
Гійом Коте

-1

Що я роблю з моїм USB-накопичувачем і мобільним USB-диском, це розділити їх на 2 розділи: один FAT32 і ext4. Перший я можу використовувати для обміну даними з нелінукс-користувачами, другий для особистого використання з моїми системами Ubuntu (а може бути, для обміну з іншими користувачами Linux). На розділі ext4 у вас не буде проблеми ":".


Я хотів би, щоб моя резервна копія була читаною де завгодно, якщо мені потрібна інформація на комп'ютері з Windows. Якщо ні, я б переформатував ключ usb до файлової системи unix. Ось чому я прошу про заміну.
Гійом Коте

Що ж, це можна прочитати по крайней мере , ext2 / ext3 на Windows , якщо встановити деякі інструменти або драйвери файлової системи. Ви хочете мати можливість читати його в будь-якій системі Windows або лише у власних системах (де ви могли б встановити необхідні інструменти, якщо вони вам потрібні)?
JanC

BTW: теоретично слід зберігати його і в системі NTFS, але більшість програм Windows (включаючи більшість Microsoft) не підтримують NTFS правильно ...: P
JanC

Це найгірший варіант резервного копіювання, тому я хочу бути готовим до справи, коли мені потрібно щось швидко, я не маю права нічого встановлювати на комп'ютер.
Гійом Коте

-2

Ви можете використовувати tarдля створення архіву. Таким чином, вам не потрібно змінювати імена, і ви можете зберегти їх у будь-яку файлову систему.


Я міг би зробити те ж саме з поштовим файлом або tgz, але це буде переписувати файл, який не змінювався щоразу. Оскільки медіа як обмежена кількість записів, і я отримав декілька Gib даних, я хотів би уникнути переписування всього цього лише тому, що було додано новий 1kb файл.
Гійом Коте

Переписування на останній флеш-пам’яті зазвичай «обмежується» кількістю мільйонів або, принаймні, сотнями тисяч. Сумніваюся, ви плануєте зробити стільки резервних копій. ;)
JanC

2
-1 -azv не створює архів, він робить копію режиму архіву, а значить, він підтримує атрибути файлів
Жоао Пінто

sry, дійсно думав, що rsync може це зробити, змінивши на tar, але я не знаю, чи tar може робити додаткові резервні копії. Однак JanC правий, і переписування не повинно бути проблемою.
Девід

Що стосується коментарів JanC щодо переписувань, то це не лише той факт, що існує межа (востаннє я перевіряю, це було ближче до тисячі, ніж мільйон), а й те, що мені не подобається чекати кілька годин на щось таке, має бути менше хвилини.
Гійом Коте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.