Descrição longa para um diretório

2

Eu armazeno minhas imagens nesta estrutura:

YYYY/MM/DD-foo

-foo é opcional e uma breve descrição do evento.

Por vezes, gostaria de armazenar uma longa descrição para este diretório.

Acho que a resposta "Você pode usar o programm X para suas imagens" não ajuda.

Eu também gostaria de ter uma solução que funcione para diretórios contendo arquivos de texto ou áudio.

Pergunta: Como dar um diretório uma descrição longa? Uma descrição que pode conter novas linhas e outros caracteres como uma barra?

Atualizar

And you can't simply store text files with descriptions in the directories?

Sim, eu poderia fazer isso. Mas eu pensei que já existe uma convenção ou especificação para isso.

Eu adoraria ver isso no nautilus:

  • 01-short-directory-name, Texto longo e detalhado,
  • 02-short-directory-name, longo e detalhado Text2,
  • ...

Eu mesmo não consegui encontrar uma especificação de meta-dados para diretórios.

Recursos necessários

  • O backup com rsync , tar , dropbox ou owncloud deve funcionar.
  • O texto deve permitir conter qualquer caractere unicode.
  • Mapeamento de valor de chave arbitrário (como json)
  • Solução comum, não um hack de script próprio.
por guettli 09.08.2016 / 08:30

2 respostas

5

Rinzwind já apresentou razões pelas quais barras e outros caracteres especiais não são desejáveis em nomes de arquivos e diretórios. Minha resposta apresenta uma solução simples através dos scripts do Nautilus.

Introdução

O script a seguir depende da existência do arquivo .directory_description em cada diretório (observe o ponto inicial). Se o arquivo não existir, o usuário será solicitado a criar um.

As vantagens desta abordagem são:

  1. Simples de usar: .directory_description é apenas um arquivo de texto, portanto, simplesmente editável via editor de texto. É só clicar com o botão direito do mouse, de modo que até usuários não técnicos possam usá-lo.

  2. A descrição faz parte do diretório, portanto, ao fazer backup do diretório corretamente (com a inclusão de todos os arquivos, incluindo os arquivos de ponto), também será feito o backup da descrição.

Obtendo o script

O script está disponível como parte do meu repositório do github e abaixo. Para quem tem git instalado, use os seguintes passos no terminal.

  1. cd ~/.local/share/nautilus/scripts
  2. git clone https://github.com/SergKolo/nautilus_scripts

Aqueles que não têm git seguem estas etapas:

  1. copie o código-fonte diretamente desta resposta.
  2. Salve o código como ~/.local/share/nautius/scripts/read_dir_description.py file.
  3. Verifique se ele é executável com chmod +x ~/.local/share/nautius/scripts/read_dir_description.py

Agora, toda vez que você clicar com o botão direito no diretório e acessar o menu scripts , poderá executar read_dir_description.py nesse diretório.

Código-fonte do script:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Author: Serg Kolo
Date: Aug 16,2016
Written for: http://askubuntu.com/q/809925/295286
"""
import subprocess
import sys
import os.path

def display_file(textfile):
    """ Displays file containing
        directory description if 
        the file exists
    """
    subprocess.call([
                    'zenity', 
                    '--text-info', 
                    '--filename=' + textfile
                    ])

def create_file(textfile):
    """ Creates text file containing
        directory description
        if the description doesn't exist
    """
    try:
        err_text = '"This directory doesn\'t have description.' +\
                   'Would you like to create one now?"'
        subprocess.check_call([
                              'zenity',
                              '--error',
                              '--text=' + err_text
                              ])
    except subprocess.CalledProcessError:
        sys.exit()

    # ensure we create the file
    with open(textfile,'w') as text:
        text.write('')                

    try:

        output = subprocess.check_output([
                           'zenity', 
                           '--text-info', 
                           '--editable',
                           '--filename=' + textfile
                           ])
    except subprocess.CalledProcessError:
        sys.exit()

    with open(textfile,'w') as text:
        text.write(output.decode())



def main():

    file_name = '.directory_description'
    directory = os.path.abspath(sys.argv[1])
    file_path = os.path.join(directory, file_name)

    if os.path.isfile(file_path):
        display_file(file_path)
    else:
        create_file(file_path )

if __name__ == '__main__':
    main()

Script em ação

Acessando o script via clique direito

Dialognotificandoqueadescriçãonãoexiste

Exemplodedescriçãododiretório

por Sergiy Kolodyazhnyy 17.08.2016 / 04:50
2

Você pode usar atributos de arquivo estendidos. Depois de instalar o pacote attr , você pode fazer, e. algo assim:

setfattr -n user.comment -v "this is a comment" directory_name

e leia com:

getfattr -n user.comment directory_name

De acordo com o site , há um pacote chamado eiciel , que integra o Nautilus.

Barras e outros caracteres ASCII não são um problema, no entanto, outros caracteres podem ser complicados, veja link .

rsync , cp , scp e provavelmente a maioria das outras ferramentas padrão preservam os atributos estendidos ou têm a opção de preservá-los.

    
por tlo 17.08.2016 / 12:36