GVFS umožňuje v uživatelském prostoru zpřístupnit data přes mnoho různých protokolů, jako je samba, ftp, ssh, ... a také spravuje metadata k jednotlivým souborům. Aplikace si tak mohou ke každému souboru ukládat vlastní atributy, jako je například pozice ikony na pracovní ploše. Zajímají-li vás všechna metadata ke konkrétnímu souboru, použijete následující příkaz:
gvfs-info soubor
Přepínačem -a můžete přímo specifikovat, jaký atribut vás zajímá, přičemž buď zadáte jen umístění (před dvojitou dvojtečkou), nebo přidáte i celé jméno konkrétního atributu.
$ gvfs-info -a access soubor
attributes:
access::can-read: TRUE
access::can-write: TRUE
access::can-execute: FALSE
access::can-delete: TRUE
access::can-trash: TRUE
access::can-rename: TRUE
attributes:
access::can-read: TRUE
access::can-write: TRUE
access::can-execute: FALSE
access::can-delete: TRUE
access::can-trash: TRUE
access::can-rename: TRUE
Atributy můžete souborům přidávat a měnit i z příkazového řádku, kam můžete zapisovat, zjistíte příkazem:
$ gvfs-info --query-writable soubor
...
Writable attribute namespaces:
metadata (string, Copy with file, Keep with file when moved)
xattr (string, Copy with file, Keep with file when moved)
xattr-sys (string, Keep with file when moved)
...
Writable attribute namespaces:
metadata (string, Copy with file, Keep with file when moved)
xattr (string, Copy with file, Keep with file when moved)
xattr-sys (string, Keep with file when moved)
Takže si mohu k souboru zapsat vlastní poznámku (třeba hujaja) jako atribut metadata:
gvfs-set-attribute soubor metadata::muj-attribut hujaja
No a vlastní skripty pro zálohování a obnovení metadat Nautila s pozicí ikon na ploše může vypadat následovně. Cesta k Ploše se čte z nastavení prostředí, takže vždy bude použita ta aktuální.
get-positions
#!/bin/bash
DESKTOP_DIR=`xdg-user-dir DESKTOP`
ls -1 $DESKTOP_DIR | while read file; do
echo "$file"
gvfs-info -a 'metadata::nautilus-icon-position' "$DESKTOP_DIR/$file"|
sed -n 's/.*: \(.*\)/\1/p' | tr -d "\n"
echo
done
DESKTOP_DIR=`xdg-user-dir DESKTOP`
ls -1 $DESKTOP_DIR | while read file; do
echo "$file"
gvfs-info -a 'metadata::nautilus-icon-position' "$DESKTOP_DIR/$file"|
sed -n 's/.*: \(.*\)/\1/p' | tr -d "\n"
echo
done
restore-positions
#!/bin/bash
SOURCE_FILE=$1
DESKTOP_DIR=`xdg-user-dir DESKTOP`
while read file; do
read position
[[ $position ]] || continue
echo -e "Moving to $position \t$file" >&2
gvfs-set-attribute "$DESKTOP_DIR/$file" metadata::nautilus-icon-position "$position"
done < $SOURCE_FILE
SOURCE_FILE=$1
DESKTOP_DIR=`xdg-user-dir DESKTOP`
while read file; do
read position
[[ $position ]] || continue
echo -e "Moving to $position \t$file" >&2
gvfs-set-attribute "$DESKTOP_DIR/$file" metadata::nautilus-icon-position "$position"
done < $SOURCE_FILE
Použití je následující:
get-positions > soubor
restore-positions soubor
restore-positions soubor
První skript vypíše všechny soubory z plochy spolu s jejich souřadnicemi na ploše, pokud je mají, do terminálu, přesměrováním se uloží do souboru. Druhý skript pak tento uložený výstup umí číst a souborům metadata s pozicí postupně obnovit.
GVFS si metadata ukládá na disku v binární podobě v adresáři
$HOME/.local/share/gvfs-metadata/
Trochu mě pobavilo, když po 'tr -d "\n"' dáváš hned 'echo', což se nějak navzájem vyruší, ale možná to má nějaký skrytý význam ;) Taky si myslím, že údaje o poloze se na disk ukládají, protože musí přežít reboot, neukládají se ale okamžitě. Např. pozice na Desktopu mám v Mavericku uložené v '$HOME/.local/share/gvfs-metadata/home'.
OdpovědětVymazatJinak mě vždycky překvapí takovéto poloskryté a nepříliš zdokumentované utilitky, které Ubuntu obsahuje, a tak si myslím, že tímto děláš dobrou práci. Já používám 'gvfs-mount' pro výpisy připojených zařízení, hlavně těch, které nejsou v klasickém 'mount', a občas 'gvfs-trash' ve skriptech (lepší než nevratné 'rm').
Jo, ještě bych měl jednu prosbu: jestli budeš mít čas a/nebo chuť, mrkni se na můj program: http://sourceforge.net/projects/h-f/. Jak jsem asi před měsícem psal, chtěl jsem upravit vyhledávání v hstr (bash history suggestion box), ale nakonec jsem to forknul a přepsal skoro celé po svém. Potřeboval bych nějaké nezávislé zhodnocení. Takže za případné připomínky budu vděčný! (Návod ještě napsaný nemám, ale zkompilovat bys to měl zvládnout, částečný návod je na začátku kódu.)
Díky. arrange
To vymazání znaku nového řádku má význam v tom, že pokud soubor nemá souřadnice, sed nic nevypíše a já potřebuju (dobře - chci) jednotnou strukturu, když to pak čtu. Vypisuju totiž schválně úplně všechny soubory, nejen ty, které souřadnice mají.
VymazatŽe to na disk nakonec ukládá je jasné, jen to tak jednoduše nevystopuju přes fatrace. Asi jsem tam měl napsat, že to vím, jen jsem byl zrovna líný dohledat ten konkrétní soubor :) Dohledám to a dopíšu.
Na tvé dílo se určitě podívám a dám vědět.
Díky za koment!
Super!
VymazatToto mi pomohlo vyřešit problém po konzolovém upgradu Ubuntu 15.04 -> 15.10, kdy mi nevyčítalo pozice ikon a ani nezapisovalo nové pozice. Sice jsem hledal root:root v ~, ale asi jsem přehlédl .local/share
Problém byl, že adresář .local/share/gvfs-metadata/home byl pod vlastníkem root:root
Díky! :-)