Как я могу заменить двоеточия, когда я rsync на USB-ключ?

Вы можете открыть новое частное окно в Firefox (так же, как окно инкогнито Chrome) и использовать его одновременно с обычным браузером с разными учетными записями.

11
задан 9 November 2010 в 19:46

32 ответа

Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. Начиная с Ubuntu 12.04 существует файловая система FUSE, которая преобразует имена файлов в имена, которые поддерживает VFAT Windows: fuse-posixovl.

sudo mount.posixovl /media/sdb1 chown guillaume /media/sdb1 rsync -au ~/mail /media/sbd1/

Или чтобы избежать необходимости доступа root:

mkdir ~/mnt /sbin/mount.posixovl -S /media/sdb1 ~/mnt rsync -au ~/mail ~/mnt/

Символы в именах файлов, которые VFAT не принимает, кодируются как %(XX), где XX - шестнадцатеричные цифры. С POSIXovl 1.2.20120215 будьте осторожны, что имя файла, например %(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 ]]

Вот двухстрочный 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), в имя файла, полученное путем расширения его второго операнда. -o -pu говорит, чтобы передать -pu в утилиту cp, чтобы сохранить разрешения и скопировать только обновленные файлы. (Мы могли бы сказать zsh выполнить проверку обновлений, это будет немного быстрее, но еще более загадочным.) [F33] выбирает только обычные файлы. -Q говорит, что это должно быть проанализировано как квалификатор glob, а не как . с круглыми скобками вокруг него, указывающими подвыражение. $1 и $2 в заменяющем тексте соответствуют заключенным в скобки выражениям (**/) и *. (** теряет свое особое значение как ноль или более уровней подкаталога, если оно находится в круглых скобках, если в круглых скобках не указано точно **/.)

Первоначально я думал использовать FUSE , который является инструментом архивации (здесь предназначен для использования в сквозном режиме), который имеет функцию переименования файлов (опция -s). Однако параметры -s и -u не работают вместе (определение pax в POSIX буквально говорит о том, что -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/
6
ответ дан 25 July 2018 в 22:56
  • 1
    Я попытаюсь использовать pax. Возможно, вы могли бы улучшить свой ответ, указав необходимый пакет на ubuntu. Это не похоже на обычную установку. – Guillaume Coté 7 November 2010 в 07:19
  • 2
    Просто добавление одного пакета под названием pax заставляет его работать. – Guillaume Coté 7 November 2010 в 07:31
  • 3
    Он ничего не выводит, я пытаюсь добавить параметр -v, чтобы увидеть, что происходит. Кажется, он все время копирует все. Точка rsync должна быть инкрементальной, что заставило меня сэкономить много времени, когда у меня есть только несколько модифицированных файлов в середине большого количества файлов. – Guillaume Coté 7 November 2010 в 07:37
  • 4
    Кажется, он создает каталог «home» в указанном вами пути. Рекомендуется избегать изменения каталога в скрипте, есть ли еще одна возможность избежать создания всех этих каталогов? – Guillaume Coté 7 November 2010 в 08:04
  • 5
    Прошло пять минут на втором проходе, где все было одинаково. rsync занял бы всего несколько секунд. Есть ли опция, которая должна быть указана, чтобы сделать ее инкрементальной? – Guillaume Coté 7 November 2010 в 08:07

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

-2
ответ дан 25 July 2018 в 22:56
  • 1
    Я мог бы сделать то же самое с zip-файлом или tgz, но он будет переписывать файл, который не менялся каждый раз. Поскольку средства массовой информации как ограниченное число писем, и я получил несколько Gib данных, я бы хотел избежать перезаписи всего этого только потому, что был добавлен новый 1kb-файл. – Guillaume Coté 6 November 2010 в 01:40
  • 2
    Перезаписи в последней флэш-памяти «ограничены». до нескольких миллионов или, как минимум, сотен тысяч человек. Я сомневаюсь, что вы планируете сделать много резервных копий. ;) – JanC 6 November 2010 в 02:13
  • 3
    -1 -azv не создает архив, он копирует режим архива, что означает, что он поддерживает атрибуты файла – João Pinto 6 November 2010 в 02:42
  • 4
    sry, действительно думал, что rsync может это сделать, изменен на tar, но я не знаю, может ли tar делать инкрементные резервные копии. Однако JanC прав, и переписывание не должно быть проблемой. – david 6 November 2010 в 16:47
  • 5
    Что касается комментариев Джанка о переписываниях, дело не только в том, что существует предел (последний раз, когда я проверяю, он был ближе к тысячам миллионов), но и тот факт, что я не люблю ждать несколько часов за что-то, что должно быть меньше минуты. – Guillaume Coté 7 November 2010 в 07:13

Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».

-1
ответ дан 25 July 2018 в 22:56
  • 1
    Я хотел бы, чтобы моя резервная копия была доступна для чтения в любом случае, если мне нужна информация на компьютере Windows. Если нет, я бы переформатировал ключ usb в файловой системе unix. Вот почему я спрашиваю о замене. – Guillaume Coté 6 November 2010 в 09:41
  • 2
    Ну, возможно читать по крайней мере ext2 / ext3 в Windows, если вы устанавливаете некоторые инструменты или драйверы файловой системы. Хотите ли вы читать его в каждой системе Windows или только в своих собственных системах (где вы могли бы установить необходимые инструменты, если они вам нужны)? – JanC 6 November 2010 в 10:11
  • 3
    BTW: теоретически его также можно сохранить в системе NTFS, но большинство приложений Windows (в том числе большинство из Microsoft) не поддерживают NTFS правильно ...: P – JanC 6 November 2010 в 10:13
  • 4
    Это худшее решение для резервного копирования, поэтому я хочу быть готовым к делу, когда мне нужно что-то быстро, я не имею права устанавливать что-либо на компьютер. – Guillaume Coté 7 November 2010 в 07:15

Используйте rdiff-backup вместо простого rsync. Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.

8
ответ дан 25 July 2018 в 22:56

Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. Начиная с Ubuntu 12.04 существует файловая система FUSE, которая преобразует имена файлов в имена, которые поддерживает VFAT Windows: fuse-posixovl.

sudo mount.posixovl /media/sdb1 chown guillaume /media/sdb1 rsync -au ~/mail /media/sbd1/

Или чтобы избежать необходимости доступа root:

mkdir ~/mnt /sbin/mount.posixovl -S /media/sdb1 ~/mnt rsync -au ~/mail ~/mnt/

Символы в именах файлов, которые VFAT не принимает, кодируются как %(XX), где XX - шестнадцатеричные цифры. С POSIXovl 1.2.20120215 будьте осторожны, что имя файла, например %(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 ]]

Вот двухстрочный 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), в имя файла, полученное путем расширения его второго операнда. -o -pu говорит, чтобы передать -pu в утилиту cp, чтобы сохранить разрешения и скопировать только обновленные файлы. (Мы могли бы сказать zsh выполнить проверку обновлений, это будет немного быстрее, но еще более загадочным.) [F33] выбирает только обычные файлы. -Q говорит, что это должно быть проанализировано как квалификатор glob, а не как . с круглыми скобками вокруг него, указывающими подвыражение. $1 и $2 в заменяющем тексте соответствуют заключенным в скобки выражениям (**/) и *. (** теряет свое особое значение как ноль или более уровней подкаталога, если оно находится в круглых скобках, если в круглых скобках не указано точно **/.)

Первоначально я думал использовать FUSE , который является инструментом архивации (здесь предназначен для использования в сквозном режиме), который имеет функцию переименования файлов (опция -s). Однако параметры -s и -u не работают вместе (определение pax в POSIX буквально говорит о том, что -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/
6
ответ дан 27 July 2018 в 01:33
  • 1
    Я попытаюсь использовать pax. Возможно, вы могли бы улучшить свой ответ, указав необходимый пакет на ubuntu. Это не похоже на обычную установку. – Guillaume Coté 7 November 2010 в 07:19
  • 2
    Просто добавление одного пакета под названием pax заставляет его работать. – Guillaume Coté 7 November 2010 в 07:31
  • 3
    Он ничего не выводит, я пытаюсь добавить параметр -v, чтобы увидеть, что происходит. Кажется, он все время копирует все. Точка rsync должна быть инкрементальной, что заставило меня сэкономить много времени, когда у меня есть только несколько модифицированных файлов в середине большого количества файлов. – Guillaume Coté 7 November 2010 в 07:37
  • 4
    Кажется, он создает каталог «home» в указанном вами пути. Рекомендуется избегать изменения каталога в скрипте, есть ли еще одна возможность избежать создания всех этих каталогов? – Guillaume Coté 7 November 2010 в 08:04
  • 5
    Прошло пять минут на втором проходе, где все было одинаково. rsync занял бы всего несколько секунд. Есть ли опция, которая должна быть указана, чтобы сделать ее инкрементальной? – Guillaume Coté 7 November 2010 в 08:07

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

-2
ответ дан 27 July 2018 в 01:33
  • 1
    Я мог бы сделать то же самое с zip-файлом или tgz, но он будет переписывать файл, который не менялся каждый раз. Поскольку средства массовой информации как ограниченное число писем, и я получил несколько Gib данных, я бы хотел избежать перезаписи всего этого только потому, что был добавлен новый 1kb-файл. – Guillaume Coté 6 November 2010 в 01:40
  • 2
    Перезаписи в последней флэш-памяти «ограничены». до нескольких миллионов или, как минимум, сотен тысяч человек. Я сомневаюсь, что вы планируете сделать много резервных копий. ;) – JanC 6 November 2010 в 02:13
  • 3
    -1 -azv не создает архив, он копирует режим архива, что означает, что он поддерживает атрибуты файла – João Pinto 6 November 2010 в 02:42
  • 4
    sry, действительно думал, что rsync может это сделать, изменен на tar, но я не знаю, может ли tar делать инкрементные резервные копии. Однако JanC прав, и переписывание не должно быть проблемой. – david 6 November 2010 в 16:47
  • 5
    Что касается комментариев Джанка о переписываниях, дело не только в том, что существует предел (последний раз, когда я проверяю, он был ближе к тысячам миллионов), но и тот факт, что я не люблю ждать несколько часов за что-то, что должно быть меньше минуты. – Guillaume Coté 7 November 2010 в 07:13

Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».

-1
ответ дан 27 July 2018 в 01:33
  • 1
    Я хотел бы, чтобы моя резервная копия была доступна для чтения в любом случае, если мне нужна информация на компьютере Windows. Если нет, я бы переформатировал ключ usb в файловой системе unix. Вот почему я спрашиваю о замене. – Guillaume Coté 6 November 2010 в 09:41
  • 2
    Ну, возможно читать по крайней мере ext2 / ext3 в Windows, если вы устанавливаете некоторые инструменты или драйверы файловой системы. Хотите ли вы читать его в каждой системе Windows или только в своих собственных системах (где вы могли бы установить необходимые инструменты, если они вам нужны)? – JanC 6 November 2010 в 10:11
  • 3
    BTW: теоретически его также можно сохранить в системе NTFS, но большинство приложений Windows (в том числе большинство из Microsoft) не поддерживают NTFS правильно ...: P – JanC 6 November 2010 в 10:13
  • 4
    Это худшее решение для резервного копирования, поэтому я хочу быть готовым к делу, когда мне нужно что-то быстро, я не имею права устанавливать что-либо на компьютер. – Guillaume Coté 7 November 2010 в 07:15

Используйте rdiff-backup вместо простого rsync. Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.

8
ответ дан 27 July 2018 в 01:33

Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. Начиная с Ubuntu 12.04 существует файловая система FUSE, которая преобразует имена файлов в имена, которые поддерживает VFAT Windows: fuse-posixovl.

sudo mount.posixovl /media/sdb1 chown guillaume /media/sdb1 rsync -au ~/mail /media/sbd1/

Или чтобы избежать необходимости доступа root:

mkdir ~/mnt /sbin/mount.posixovl -S /media/sdb1 ~/mnt rsync -au ~/mail ~/mnt/

Символы в именах файлов, которые VFAT не принимает, кодируются как %(XX), где XX - шестнадцатеричные цифры. С POSIXovl 1.2.20120215 будьте осторожны, что имя файла, например %(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 ]]

Вот двухстрочный 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), в имя файла, полученное путем расширения его второго операнда. -o -pu говорит, чтобы передать -pu в утилиту cp, чтобы сохранить разрешения и скопировать только обновленные файлы. (Мы могли бы сказать zsh выполнить проверку обновлений, это будет немного быстрее, но еще более загадочным.) [F33] выбирает только обычные файлы. -Q говорит, что это должно быть проанализировано как квалификатор glob, а не как . с круглыми скобками вокруг него, указывающими подвыражение. $1 и $2 в заменяющем тексте соответствуют заключенным в скобки выражениям (**/) и *. (** теряет свое особое значение как ноль или более уровней подкаталога, если оно находится в круглых скобках, если в круглых скобках не указано точно **/.)

Первоначально я думал использовать FUSE , который является инструментом архивации (здесь предназначен для использования в сквозном режиме), который имеет функцию переименования файлов (опция -s). Однако параметры -s и -u не работают вместе (определение pax в POSIX буквально говорит о том, что -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/
6
ответ дан 31 July 2018 в 10:48
  • 1
    Я попытаюсь использовать pax. Возможно, вы могли бы улучшить свой ответ, указав необходимый пакет на ubuntu. Это не похоже на обычную установку. – Guillaume Coté 7 November 2010 в 07:19
  • 2
    Просто добавление одного пакета под названием pax заставляет его работать. – Guillaume Coté 7 November 2010 в 07:31
  • 3
    Он ничего не выводит, я пытаюсь добавить параметр -v, чтобы увидеть, что происходит. Кажется, он все время копирует все. Точка rsync должна быть инкрементальной, что заставило меня сэкономить много времени, когда у меня есть только несколько модифицированных файлов в середине большого количества файлов. – Guillaume Coté 7 November 2010 в 07:37
  • 4
    Кажется, он создает каталог «home» в указанном вами пути. Рекомендуется избегать изменения каталога в скрипте, есть ли еще одна возможность избежать создания всех этих каталогов? – Guillaume Coté 7 November 2010 в 08:04
  • 5
    Прошло пять минут на втором проходе, где все было одинаково. rsync занял бы всего несколько секунд. Есть ли опция, которая должна быть указана, чтобы сделать ее инкрементальной? – Guillaume Coté 7 November 2010 в 08:07

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

-2
ответ дан 31 July 2018 в 10:48
  • 1
    Я мог бы сделать то же самое с zip-файлом или tgz, но он будет переписывать файл, который не менялся каждый раз. Поскольку средства массовой информации как ограниченное число писем, и я получил несколько Gib данных, я бы хотел избежать перезаписи всего этого только потому, что был добавлен новый 1kb-файл. – Guillaume Coté 6 November 2010 в 01:40
  • 2
    Перезаписи в последней флэш-памяти «ограничены». до нескольких миллионов или, как минимум, сотен тысяч человек. Я сомневаюсь, что вы планируете сделать много резервных копий. ;) – JanC 6 November 2010 в 02:13
  • 3
    -1 -azv не создает архив, он копирует режим архива, что означает, что он поддерживает атрибуты файла – João Pinto 6 November 2010 в 02:42
  • 4
    sry, действительно думал, что rsync может это сделать, изменен на tar, но я не знаю, может ли tar делать инкрементные резервные копии. Однако JanC прав, и переписывание не должно быть проблемой. – david 6 November 2010 в 16:47
  • 5
    Что касается комментариев Джанка о переписываниях, дело не только в том, что существует предел (последний раз, когда я проверяю, он был ближе к тысячам миллионов), но и тот факт, что я не люблю ждать несколько часов за что-то, что должно быть меньше минуты. – Guillaume Coté 7 November 2010 в 07:13

Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».

-1
ответ дан 31 July 2018 в 10:48
  • 1
    Я хотел бы, чтобы моя резервная копия была доступна для чтения в любом случае, если мне нужна информация на компьютере Windows. Если нет, я бы переформатировал ключ usb в файловой системе unix. Вот почему я спрашиваю о замене. – Guillaume Coté 6 November 2010 в 09:41
  • 2
    Ну, возможно читать по крайней мере ext2 / ext3 в Windows, если вы устанавливаете некоторые инструменты или драйверы файловой системы. Хотите ли вы читать его в каждой системе Windows или только в своих собственных системах (где вы могли бы установить необходимые инструменты, если они вам нужны)? – JanC 6 November 2010 в 10:11
  • 3
    BTW: теоретически его также можно сохранить в системе NTFS, но большинство приложений Windows (в том числе большинство из Microsoft) не поддерживают NTFS правильно ...: P – JanC 6 November 2010 в 10:13
  • 4
    Это худшее решение для резервного копирования, поэтому я хочу быть готовым к делу, когда мне нужно что-то быстро, я не имею права устанавливать что-либо на компьютер. – Guillaume Coté 7 November 2010 в 07:15

Используйте rdiff-backup вместо простого rsync. Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.

8
ответ дан 31 July 2018 в 10:48

Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. Начиная с Ubuntu 12.04 существует файловая система FUSE, которая преобразует имена файлов в имена, которые поддерживает VFAT Windows: fuse-posixovl.

sudo mount.posixovl /media/sdb1 chown guillaume /media/sdb1 rsync -au ~/mail /media/sbd1/

Или чтобы избежать необходимости доступа root:

mkdir ~/mnt /sbin/mount.posixovl -S /media/sdb1 ~/mnt rsync -au ~/mail ~/mnt/

Символы в именах файлов, которые VFAT не принимает, кодируются как %(XX), где XX - шестнадцатеричные цифры. С POSIXovl 1.2.20120215 будьте осторожны, что имя файла, например %(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 ]]

Вот двухстрочный 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), в имя файла, полученное путем расширения его второго операнда. -o -pu говорит, чтобы передать -pu в утилиту cp, чтобы сохранить разрешения и скопировать только обновленные файлы. (Мы могли бы сказать zsh выполнить проверку обновлений, это будет немного быстрее, но еще более загадочным.) [F33] выбирает только обычные файлы. -Q говорит, что это должно быть проанализировано как квалификатор glob, а не как . с круглыми скобками вокруг него, указывающими подвыражение. $1 и $2 в заменяющем тексте соответствуют заключенным в скобки выражениям (**/) и *. (** теряет свое особое значение как ноль или более уровней подкаталога, если оно находится в круглых скобках, если в круглых скобках не указано точно **/.)

Первоначально я думал использовать FUSE , который является инструментом архивации (здесь предназначен для использования в сквозном режиме), который имеет функцию переименования файлов (опция -s). Однако параметры -s и -u не работают вместе (определение pax в POSIX буквально говорит о том, что -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/
6
ответ дан 2 August 2018 в 04:19
  • 1
    Я попытаюсь использовать pax. Возможно, вы могли бы улучшить свой ответ, указав необходимый пакет на ubuntu. Это не похоже на обычную установку. – Guillaume Coté 7 November 2010 в 07:19
  • 2
    Просто добавление одного пакета под названием pax заставляет его работать. – Guillaume Coté 7 November 2010 в 07:31
  • 3
    Он ничего не выводит, я пытаюсь добавить параметр -v, чтобы увидеть, что происходит. Кажется, он все время копирует все. Точка rsync должна быть инкрементальной, что заставило меня сэкономить много времени, когда у меня есть только несколько модифицированных файлов в середине большого количества файлов. – Guillaume Coté 7 November 2010 в 07:37
  • 4
    Кажется, он создает каталог «home» в указанном вами пути. Рекомендуется избегать изменения каталога в скрипте, есть ли еще одна возможность избежать создания всех этих каталогов? – Guillaume Coté 7 November 2010 в 08:04
  • 5
    Прошло пять минут на втором проходе, где все было одинаково. rsync занял бы всего несколько секунд. Есть ли опция, которая должна быть указана, чтобы сделать ее инкрементальной? – Guillaume Coté 7 November 2010 в 08:07

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

-2
ответ дан 2 August 2018 в 04:19
  • 1
    Я мог бы сделать то же самое с zip-файлом или tgz, но он будет переписывать файл, который не менялся каждый раз. Поскольку средства массовой информации как ограниченное число писем, и я получил несколько Gib данных, я бы хотел избежать перезаписи всего этого только потому, что был добавлен новый 1kb-файл. – Guillaume Coté 6 November 2010 в 01:40
  • 2
    Перезаписи в последней флэш-памяти «ограничены». до нескольких миллионов или, как минимум, сотен тысяч человек. Я сомневаюсь, что вы планируете сделать много резервных копий. ;) – JanC 6 November 2010 в 02:13
  • 3
    -1 -azv не создает архив, он копирует режим архива, что означает, что он поддерживает атрибуты файла – João Pinto 6 November 2010 в 02:42
  • 4
    sry, действительно думал, что rsync может это сделать, изменен на tar, но я не знаю, может ли tar делать инкрементные резервные копии. Однако JanC прав, и переписывание не должно быть проблемой. – david 6 November 2010 в 16:47
  • 5
    Что касается комментариев Джанка о переписываниях, дело не только в том, что существует предел (последний раз, когда я проверяю, он был ближе к тысячам миллионов), но и тот факт, что я не люблю ждать несколько часов за что-то, что должно быть меньше минуты. – Guillaume Coté 7 November 2010 в 07:13

Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».

-1
ответ дан 2 August 2018 в 04:19
  • 1
    Я хотел бы, чтобы моя резервная копия была доступна для чтения в любом случае, если мне нужна информация на компьютере Windows. Если нет, я бы переформатировал ключ usb в файловой системе unix. Вот почему я спрашиваю о замене. – Guillaume Coté 6 November 2010 в 09:41
  • 2
    Ну, возможно читать по крайней мере ext2 / ext3 в Windows, если вы устанавливаете некоторые инструменты или драйверы файловой системы. Хотите ли вы читать его в каждой системе Windows или только в своих собственных системах (где вы могли бы установить необходимые инструменты, если они вам нужны)? – JanC 6 November 2010 в 10:11
  • 3
    BTW: теоретически его также можно сохранить в системе NTFS, но большинство приложений Windows (в том числе большинство из Microsoft) не поддерживают NTFS правильно ...: P – JanC 6 November 2010 в 10:13
  • 4
    Это худшее решение для резервного копирования, поэтому я хочу быть готовым к делу, когда мне нужно что-то быстро, я не имею права устанавливать что-либо на компьютер. – Guillaume Coté 7 November 2010 в 07:15

Используйте rdiff-backup вместо простого rsync. Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.

8
ответ дан 2 August 2018 в 04:19

Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. С Ubuntu 12.04 существует файловая система FUSE , которая преобразует имена файлов в имена, которые поддерживает VFAT Windows: fuse-posixovl

  sudo mount.posixovl / media / sdb1 chown guillaume / media / sdb1 rsync -au ~ / mail / media / sbd1 /  

Или во избежание использования root-доступа:

  mkdir ~ / mnt /sbin/mount.posixovl -S / media / sdb1 ~ / mnt rsync -au ~ / mail ~ / mnt /  

Персонажи в имена файлов, которые VFAT не принимает, кодируются как % (XX) , где XX - шестнадцатеричные цифры. Начиная с POSIXovl 1.2.20120215, будьте осторожны, что имя файла, такое как % (3A) , закодировано как само, и будет декодировано как : , поэтому существует риск столкновения если у вас есть имена файлов, содержащие подстроки формы % (XX) .

Остерегайтесь того, что POSIXovl не справляется с длинными именами файлов. Если кодированное имя не соответствует 255 символам, файл не может быть сохранен.

POSIXovl сохраняет разрешения unix и права собственности в файлах с именем .pxovl.FILENAME .


Следующий файл bash ≥4 script копирует ~ / mail / foo: bar в / media / usb99 / mail / foo_bar , и аналогично для всех файлы в разделе ~ / mail . Файлы, которые уже существуют в дереве назначения и не старше источника, пропущены.

  #! / Bin / bash set -e shopt -s dotglob globstar для источника в "$ HOME"  / почта / ** / *;  do target = / media / usb99 / $ {source # "$ HOME" /} target = $ {target //: / _}, если [[-d $ source]];  затем mkdir -p - "$ target" elif [[$ target -ot $ source]];  то cp -p - "$ source" "$ target" fi done  

Этот скрипт работает под zsh с небольшими изменениями: замените shopt -s dotglob globstar на setopt dot_glob и [[$ target -ot $ source]] by [[! -e $ target || $ target -ot $ source]] .


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

Первоначально я думал использовать pax , который является инструментом архивации (здесь предназначен для использования в сквозном режиме), который имеет функцию переименования файлов (ее -s ). Однако параметры -s и -u не работают вместе (определение pax POSIX буквально говорит о том, что -u должен проверять файл с тем же именем в дереве назначения, а не на имя файла, преобразованное с помощью -s , реализация pax в Ubuntu следует за спецификацией буквально, а не полезно). По-прежнему можно использовать его для переименования жестких ссылок, а затем скопировать жесткие ссылки (с помощью rsync -au или pax -rw -pp -u ) на другие СМИ, но он чувствует больше проблем, чем это стоит.

  cd ~ / mail mkdir -p / media / usb99 / mail pax -rw -l -pp -s '!:! _!  г' .  ../mail.colonless rsync -au ../mail.colonless/ / media / usb99 / mail /  
6
ответ дан 6 August 2018 в 04:24

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

-2
ответ дан 6 August 2018 в 04:24

Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».

-1
ответ дан 6 August 2018 в 04:24

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

8
ответ дан 6 August 2018 в 04:24

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

-2
ответ дан 7 August 2018 в 22:30

Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».

-1
ответ дан 7 August 2018 в 22:30

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

8
ответ дан 7 August 2018 в 22:30

Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. С Ubuntu 12.04 существует файловая система FUSE , которая преобразует имена файлов в имена, которые поддерживает VFAT Windows: fuse-posixovl

  sudo mount.posixovl / media / sdb1 chown guillaume / media / sdb1 rsync -au ~ / mail / media / sbd1 /  

Или во избежание использования root-доступа:

  mkdir ~ / mnt /sbin/mount.posixovl -S / media / sdb1 ~ / mnt rsync -au ~ / mail ~ / mnt /  

Персонажи в имена файлов, которые VFAT не принимает, кодируются как % (XX) , где XX - шестнадцатеричные цифры. Начиная с POSIXovl 1.2.20120215, будьте осторожны, что имя файла, такое как % (3A) , закодировано как само, и будет декодировано как : , поэтому существует риск столкновения если у вас есть имена файлов, содержащие подстроки формы % (XX) .

Остерегайтесь того, что POSIXovl не справляется с длинными именами файлов. Если кодированное имя не соответствует 255 символам, файл не может быть сохранен.

POSIXovl сохраняет разрешения unix и права собственности в файлах с именем .pxovl.FILENAME .


Следующий файл bash ≥4 script копирует ~ / mail / foo: bar в / media / usb99 / mail / foo_bar , и аналогично для всех файлы в разделе ~ / mail . Файлы, которые уже существуют в дереве назначения и не старше источника, пропущены.

  #! / Bin / bash set -e shopt -s dotglob globstar для источника в "$ HOME"  / почта / ** / *;  do target = / media / usb99 / $ {source # "$ HOME" /} target = $ {target //: / _}, если [[-d $ source]];  затем mkdir -p - "$ target" elif [[$ target -ot $ source]];  то cp -p - "$ source" "$ target" fi done  

Этот скрипт работает под zsh с небольшими изменениями: замените shopt -s dotglob globstar на setopt dot_glob и [[$ target -ot $ source]] by [[! -e $ target || $ target -ot $ source]] .


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

Первоначально я думал использовать pax , который является инструментом архивации (здесь предназначен для использования в сквозном режиме), который имеет функцию переименования файлов (ее -s ). Однако параметры -s и -u не работают вместе (определение pax POSIX буквально говорит о том, что -u должен проверять файл с тем же именем в дереве назначения, а не на имя файла, преобразованное с помощью -s , реализация pax в Ubuntu следует за спецификацией буквально, а не полезно). По-прежнему можно использовать его для переименования жестких ссылок, а затем скопировать жесткие ссылки (с помощью rsync -au или pax -rw -pp -u ) на другие СМИ, но он чувствует больше проблем, чем это стоит.

  cd ~ / mail mkdir -p / media / usb99 / mail pax -rw -l -pp -s '!:! _!  г' .  ../mail.colonless rsync -au ../mail.colonless/ / media / usb99 / mail /  
6
ответ дан 7 August 2018 в 22:30

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

-2
ответ дан 10 August 2018 в 10:38

Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».

-1
ответ дан 10 August 2018 в 10:38

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

8
ответ дан 10 August 2018 в 10:38

Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. С Ubuntu 12.04 существует файловая система FUSE , которая преобразует имена файлов в имена, которые поддерживает VFAT Windows: fuse-posixovl

  sudo mount.posixovl / media / sdb1 chown guillaume / media / sdb1 rsync -au ~ / mail / media / sbd1 /  

Или во избежание использования root-доступа:

  mkdir ~ / mnt /sbin/mount.posixovl -S / media / sdb1 ~ / mnt rsync -au ~ / mail ~ / mnt /  

Персонажи в имена файлов, которые VFAT не принимает, кодируются как % (XX) , где XX - шестнадцатеричные цифры. Начиная с POSIXovl 1.2.20120215, будьте осторожны, что имя файла, такое как % (3A) , закодировано как само, и будет декодировано как : , поэтому существует риск столкновения если у вас есть имена файлов, содержащие подстроки формы % (XX) .

Остерегайтесь того, что POSIXovl не справляется с длинными именами файлов. Если кодированное имя не соответствует 255 символам, файл не может быть сохранен.

POSIXovl сохраняет разрешения unix и права собственности в файлах с именем .pxovl.FILENAME .


Следующий файл bash ≥4 script копирует ~ / mail / foo: bar в / media / usb99 / mail / foo_bar , и аналогично для всех файлы в разделе ~ / mail . Файлы, которые уже существуют в дереве назначения и не старше источника, пропущены.

  #! / Bin / bash set -e shopt -s dotglob globstar для источника в "$ HOME"  / почта / ** / *;  do target = / media / usb99 / $ {source # "$ HOME" /} target = $ {target //: / _}, если [[-d $ source]];  затем mkdir -p - "$ target" elif [[$ target -ot $ source]];  то cp -p - "$ source" "$ target" fi done  

Этот скрипт работает под zsh с небольшими изменениями: замените shopt -s dotglob globstar на setopt dot_glob и [[$ target -ot $ source]] by [[! -e $ target || $ target -ot $ source]] .


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

Первоначально я думал использовать pax , который является инструментом архивации (здесь предназначен для использования в сквозном режиме), который имеет функцию переименования файлов (ее -s ). Однако параметры -s и -u не работают вместе (определение pax POSIX буквально говорит о том, что -u должен проверять файл с тем же именем в дереве назначения, а не на имя файла, преобразованное с помощью -s , реализация pax в Ubuntu следует за спецификацией буквально, а не полезно). По-прежнему можно использовать его для переименования жестких ссылок, а затем скопировать жесткие ссылки (с помощью rsync -au или pax -rw -pp -u ) на другие СМИ, но он чувствует больше проблем, чем это стоит.

  cd ~ / mail mkdir -p / media / usb99 / mail pax -rw -l -pp -s '!:! _!  г' .  ../mail.colonless rsync -au ../mail.colonless/ / media / usb99 / mail /  
6
ответ дан 10 August 2018 в 10:38

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

-2
ответ дан 13 August 2018 в 17:11
  • 1
    Я мог бы сделать то же самое с zip-файлом или tgz, но он будет переписывать файл, который не менялся каждый раз. Поскольку средства массовой информации как ограниченное число писем, и я получил несколько Gib данных, я бы хотел избежать перезаписи всего этого только потому, что был добавлен новый 1kb-файл. – Guillaume Coté 6 November 2010 в 01:40
  • 2
    Перезаписи в последней флэш-памяти «ограничены». до нескольких миллионов или, как минимум, сотен тысяч человек. Я сомневаюсь, что вы планируете сделать много резервных копий. ;) – JanC 6 November 2010 в 02:13
  • 3
    -1 -azv не создает архив, он копирует режим архива, что означает, что он поддерживает атрибуты файла – João Pinto 6 November 2010 в 02:42
  • 4
    sry, действительно думал, что rsync может это сделать, изменен на tar, но я не знаю, может ли tar делать инкрементные резервные копии. Однако JanC прав, и переписывание не должно быть проблемой. – david 6 November 2010 в 16:47
  • 5
    Что касается комментариев Джанка о переписываниях, дело не только в том, что существует предел (последний раз, когда я проверяю, он был ближе к тысячам миллионов), но и тот факт, что я не люблю ждать несколько часов за что-то, что должно быть меньше минуты. – Guillaume Coté 7 November 2010 в 07:13

Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».

-1
ответ дан 13 August 2018 в 17:11
  • 1
    Я хотел бы, чтобы моя резервная копия была доступна для чтения в любом случае, если мне нужна информация на компьютере Windows. Если нет, я бы переформатировал ключ usb в файловой системе unix. Вот почему я спрашиваю о замене. – Guillaume Coté 6 November 2010 в 09:41
  • 2
    Ну, возможно, возможно читать по крайней мере ext2 / ext3 в Windows, если вы устанавливаете некоторые инструменты или драйверы файловой системы. Хотите ли вы читать его в каждой системе Windows или только в своих собственных системах (где вы могли бы установить необходимые инструменты, если они вам нужны)? – JanC 6 November 2010 в 10:11
  • 3
    BTW: теоретически его также можно сохранить в системе NTFS, но большинство приложений Windows (в том числе большинство из Microsoft) не поддерживают NTFS правильно ...: P – JanC 6 November 2010 в 10:13
  • 4
    Это худшее решение для резервного копирования, поэтому я хочу быть готовым к делу, когда мне нужно что-то быстро, я не имею права устанавливать что-либо на компьютер. – Guillaume Coté 7 November 2010 в 07:15

Другие вопросы по тегам:

Похожие вопросы: