将 Nautilus 文件属性(图标、位置、文件夹视图)迁移到另一台计算机

将 Nautilus 文件属性(图标、位置、文件夹视图)迁移到另一台计算机

我经常使用 Nautilus 的选项向文件添加元数据。例如,我使用手动定位图标,有许多带有自定义图标和徽标的文件等。

我如何将所有这些元信息复制到另一台计算机?我知道使用 rsync 或类似的经典文件复制机制只会复制文件的名称、时间戳和内容,但 Nautilus 提供的豪华功能却无法实现。即使我通过 Nautulus 本身通过已安装的远程驱动器移动文件,也不会复制这些元数据。

谢谢你的帮助。

答案1

我用一个小的 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}, '.');

相关内容