Вы можете открыть новое частное окно в Firefox (так же, как окно инкогнито Chrome) и использовать его одновременно с обычным браузером с разными учетными записями.
Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. Начиная с 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/
Вы можете использовать tar для создания архива. Таким образом, вам не нужно менять имена и сохранять их в любой файловой системе, которую вы хотите.
Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».
Используйте rdiff-backup вместо простого rsync. Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.
Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. Начиная с 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/
Вы можете использовать tar для создания архива. Таким образом, вам не нужно менять имена и сохранять их в любой файловой системе, которую вы хотите.
Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».
Используйте rdiff-backup вместо простого rsync. Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.
Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. Начиная с 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/
Вы можете использовать tar для создания архива. Таким образом, вам не нужно менять имена и сохранять их в любой файловой системе, которую вы хотите.
Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».
Используйте rdiff-backup вместо простого rsync. Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.
Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. Начиная с 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/
Вы можете использовать tar для создания архива. Таким образом, вам не нужно менять имена и сохранять их в любой файловой системе, которую вы хотите.
Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».
Используйте rdiff-backup вместо простого rsync. Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.
Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. С 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 /
Вы можете использовать tar
для создания архива. Таким образом, вам не нужно менять имена и сохранять их в любой файловой системе, которую вы хотите.
Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».
Вместо обычного rsync используйте rdiff-backup . Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.
Вы можете использовать tar
для создания архива. Таким образом, вам не нужно менять имена и сохранять их в любой файловой системе, которую вы хотите.
Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».
Вместо обычного rsync используйте rdiff-backup . Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.
Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. С 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 /
Вы можете использовать tar
для создания архива. Таким образом, вам не нужно менять имена и сохранять их в любой файловой системе, которую вы хотите.
Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».
Вместо обычного rsync используйте rdiff-backup . Он автоматически обнаруживает и заменяет символы, которые не поддерживаются на целевом диске, а также откладывает их обратно, как при восстановлении в файловой системе unix. Он создает распакованный каталог, который похож на источник и один дополнительный каталог метаданных.
Самый простой подход - использовать уровень файловой системы для преобразования имен файлов. С 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 /
Вы можете использовать tar
для создания архива. Таким образом, вам не нужно менять имена и сохранять их в любой файловой системе, которую вы хотите.
Что я делаю с USB-накопителем и мобильным USB-диском, разделяю их на 2 раздела: один FAT32 и ext4. Первый, который я могу использовать для обмена данными с не-linux-пользователями, второй для моего личного использования с моими системами Ubuntu (и, возможно, для обмена с другими пользователями Linux). На разделе ext4 у вас не будет проблемы с «:».