Я использую опции Наутилуса, чтобы часто добавлять метаданные в файлы. Например, я использую ручное расположение значков, у меня много файлов с пользовательскими значками и эмблемами и т. Д.
Как я могу скопировать всю эту мета-информацию на другой компьютер? Я понимаю, что при использовании rsync или подобных классических механизмов копирования файлов копируется только имя, временные метки и содержимое файлов, но это не та роскошь, которую предоставляет Nautilus. Даже когда я перемещаю файлы через подключенный удаленный диск через сам Nautulus, эти метаданные не копируются.
Спасибо за любую помощь.
Я решил проблему с маленьким сценарием Perl, см. https://github.com/despens/metasave
#!/usr/bin/perl
use 5.10.0;
use strict;
use utf8;
use File::Find;
use String::ShellQuote;
sub handler {
my $filename = shell_quote($_);
my $metadata = qx/gvfs-info -a metadata::* $filename/ or die "$filename: $!\n";
my @lines = split(/\n /s, $metadata);
for my $line (@lines) {
my ($attribute, $value) = $line =~ m/^\s*(\S+): (.+)$/s;
if($attribute and $value) {
# is there an array in the value?
if($value =~ m/^\[.+\]$/s) {
$value =~ s/^\[(.+)\]$/$1/gs;
my @values = split(/[\[\],\s]+/s, $value);
map shell_quote, @values;
my $stringv = join(' ', @values);
say "gvfs-set-attribute $filename -t stringv $attribute $stringv ;";
}
else {
if($value ne '[]') {
$value = shell_quote($value);
say "gvfs-set-attribute $filename $attribute $value ;";
}
}
}
}
}
say "#!/bin/sh";
find({wanted => \&handler, follow => 0, no_chdir => 1}, '.');