所需功能

所需功能

我将图像存储在以下结构中:

YYYY/MM/DD-foo

-foo是可选的,是对事件的简短描述。

有时我想存储一个详细描述该目录。

我认为答案“您可以将程序 X 用于您的图像”没有帮助。

我想要一个适用于包含文本或音频文件的目录的解决方案。

问题:如何为目录提供长描述?描述中可以包含换行符和其他字符(如斜线)?

更新

您不能简单地将带有描述的文本文件存储在目录中吗?

是的,我可以这样做。但我认为对此已经有惯例或规范。

我很想在 Nautilus 中看到这一点:

  • 01-短目录名称,长而详细的文本,
  • 02-短目录名称,长且详细的文本2,
  • ...

我自己找不到目录的元数据规范。

所需功能

  • 使用rsync、、tardropbox 或 owncloud 备份应该可以。
  • 文本应该允许包含任何Unicode字符。
  • 任意键值映射(如 json)
  • 常见的解决方案,而不是自制的脚本黑客。

答案1

Rinzwind 已经解释了为什么斜线和其他特殊字符不适合出现在文件名和目录名中。我的回答介绍了一种通过 Nautilus 脚本实现的简单解决方法。

介绍

以下脚本依赖于.directory_description每个目录中文件的存在(请注意前导点)。如果文件不存在,将提示用户创建一个。

这种方法的优点是:

  1. 使用简单:.directory_description只是文本文件,因此可以通过文本编辑器轻松编辑。只需右键单击即可,因此即使非技术用户也可以使用它。

  2. 描述是目录的一部分,因此当正确备份目录(包含所有文件,包括点文件)时,描述也会被备份。

获取脚本

该脚本可作为我的github 存储库以及下面的内容。对于已经git安装的用户,请在终端中使用以下步骤。

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

那些没有的人请git按照以下步骤操作:

  1. 直接从该答案复制源代码。
  2. 将代码保存为~/.local/share/nautius/scripts/read_dir_description.py文件。
  3. 确保它可以执行chmod +x ~/.local/share/nautius/scripts/read_dir_description.py

现在,每次您右键单击目录并进入scripts菜单,您将能够read_dir_description.py在该目录上运行。

脚本源代码:

#!/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()

脚本运行

通过右键单击访问脚本

在此处输入图片描述


通知描述不存在的对话框

在此处输入图片描述


示例目录说明

在此处输入图片描述


答案2

您可以使用扩展文件属性。安装软件包后,attr您可以执行以下操作:

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

并使用以下命令读取:

getfattr -n user.comment directory_name

根据本网站有一个名为的包eiciel集成在 Nautilus 中。

斜线和其他 ASCII 字符不是问题,但其他字符可能会比较棘手,请参阅https://unix.stackexchange.com/questions/138768/what-is-this-seemingly-base64-data-set-by-setfattr

rsync,,cp并且scp可能大多数其他标准工具要么保留扩展属性,要么可以选择保留它。

相关内容