Модуль iconv (для использования с rsync) для предотвращения незаконных имен файлов в локальном NTFS разделе

Учитывая эти переменные:

$ a=$'one\ntwo';echo "$a"
one
two
$ b=$'three\nfour';echo "$b"
three
four

Вот некоторые возможные варианты:

$ printf '%s\n%s\n' "$a" "$b" |awk '{print NR,$0}'
$ awk '{print NR,$0}' <(echo "$a") <(echo "$b")   #process substitution as per Kusalananda's comment
$ echo "$a" |awk '{print NR,$0}' - <(echo "$b")
$ { echo "$a" && echo "$b";} |awk '{print NR,$0}'  #or even { echo "$a";echo "$b";}
$ awk '{print NR,$0}' <(echo "$a";echo "$b")
$ awk '{print NR,$0}' <<<$(echo "$a";echo "$b")

Все приведенные выше примеры приводят к:

1 one
2 two
3 three
4 four

Если переменные заканчиваются новой строкой (т.е. переменные содержат содержимое файлов) следующим образом шаблон:

$ a=$'one\ntwo\n'
$ b=$'three\nfour\n'

Тогда также работает:

$ awk '{print NR,$0}' <<<"$a$b"
1 one
2 two
3 three
4 four
5 
1
13.04.2017, 15:37
1 ответ

Прагматическим решением было бы воспроизвести исходные каталоги с желаемыми преобразованными именами файлов локально, используя жесткие ссылки на исходные файлы, а затем rsync эта копия как есть для файловой системы ntfs.

Например, эта демонстрация скрипта Perl дублирует иерархию / tmp / a / в / tmp / b / и кодирует URL (с % и 2 шестнадцатеричные цифры) нежелательные символы, поэтому файл: b становится файлом% 3ab (жесткая ссылка), а каталог % b становится каталогом % 25b% 3cha% 3e и так далее:

#!/usr/bin/perl
use strict;
use File::Find;
my $startdir = '/tmp/a';
my $copydir = '/tmp/b';
sub handlefile{
    my $name = substr($File::Find::name,1);
    my $oldname = $startdir.$name;
    $name =~ s/([;, \t+%&<>:\"\\|?*])/sprintf('%%%02x',ord($1))/ge;
    $name = $copydir.$name;
    printf "from %s to %s\n",$oldname,$name;
    if(!-l and -d){ mkdir($name) or die $!; }
    else{ link($oldname,$name) or die $!; }
}
chdir($startdir) or die;
find(\&handlefile, '.');

Затем вы можете rsync / tmp / b на свой NTFS. Это всего лишь демонстрация, и необходимо поработать с юникодом и другими ограничениями ntfs, такими как максимальная длина имени файла. Вы также можете проверить наличие конфликтов строчных / прописных букв и использовать предпочитаемую кодировку (от : до COLON и т. Д.). Вы можете сделать второй проход, чтобы исправить отметки времени в каталогах. Если у вас нет миллионов файлов, работа, необходимая для создания этой копии структуры каталогов с жесткими ссылками на файлы, не должна быть такой обременительной.

0
28.01.2020, 01:01

Теги

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