Как я могу пометить файлы и искать их позже по тегу?
Запуск Ubuntu Gnome.
У меня есть много PDF и других документов, и я хотел бы отметить их. И искать их позже на основе этих тегов. Даже если я перемещаю файлы в разные папки (т. Е. Теги прикрепляются к файлам).
Я искал, но Файлы и Документы не предоставляют эту опцию.
Я делаю что-то неправильно? Как я могу пометить файлы, чтобы я мог искать их по тегам позже?
4 ответа
Содержание:
- Вступление
- Монтаж
- использование
- Исходный код
1. Введение
Это решение состоит из двух сценариев - один для тегирования, другой для чтения списка файлов под определенным тегом. Оба должны жить в ~/.local/share/nautilus/scripts
и активируется щелчком правой кнопкой мыши в файловом менеджере Nautilus для любого файла и переходом в подменю "Сценарии". Исходный код для каждого скрипта предоставляется здесь, а также на GitHub
2. Установка
Оба сценария должны быть сохранены в ~/.local/share/nautilus/scripts
, где ~
является домашним каталогом пользователя и сделан исполняемым с chmod +x filename
, Для простоты установки используйте следующий скрипт bash:
#!/bin/bash
N_SCRIPTS="$HOME/.local/share/nautilus/scripts"
cd /tmp
rm master.zip*
rm -rf nautilus_scripts-master
wget https://github.com/SergKolo/nautilus_scripts/archive/master.zip
unzip master.zip
install nautilus_scripts-master/tag_file.py "$N_SCRIPTS/tag_file.py"
install nautilus_scripts-master/read_tags.py "$N_SCRIPTS/read_tags.py"
3. Использование:
Пометка файлов:
Выберите файлы в файловом менеджере Nautilus, щелкните по ним правой кнопкой мыши и перейдите в подменю "Сценарии". Выбрать tag_file.py
, Нажмите Enter При первом запуске этого скрипта не будет никакого файла конфигурации, поэтому вы увидите это:
В следующий раз, когда у вас уже будут помечены некоторые файлы, вы увидите всплывающее окно, которое позволяет вам выбрать тег и / или добавить новый (таким образом, вы можете записывать файлы под несколькими тегами). Нажмите OK, чтобы добавить файлы в этот тег. Примечание: избегайте "|" символ в имени тега.
Сценарий записывает все в ~/.tagged_files
, Этот файл по сути json
словарь (это не то, о чем должны заботиться обычные пользователи, но это удобно для программистов:)). Формат этого файла таков:
{
"Important Screenshots": [
"/home/xieerqi/\u56fe\u7247/Screenshot from 2016-10-01 09-15-46.png",
"/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 18-47-12.png",
"/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 18-46-46.png",
"/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 17-35-32.png"
],
"Translation Docs": [
"/home/xieerqi/Downloads/908173 - \u7ffb\u8bd1.doc",
"/home/xieerqi/Downloads/911683\u7ffb\u8bd1.docx",
"/home/xieerqi/Downloads/914549 -\u7ffb\u8bd1.txt"
]
}
Если вы когда-нибудь захотите "удалить тег" с какого-либо файла, просто удалите запись из этого списка. Следите за форматом и запятыми.
Поиск по тегу:
Теперь, когда у вас есть хороший ~/.tagged_files
базу данных файлов, вы можете либо прочитать этот файл, либо использовать read_tags.py
скрипт.
Щелкните правой кнопкой мыши по любому файлу в Nautilus (на самом деле не важно, какой). Выберите read_tags.py
, Нажмите Enter
Вы увидите всплывающее окно с вопросом, какой тег вы хотите найти:
Выберите один, нажмите ОК. Вы увидите диалоговое окно со списком, показывающее, что вы хотите, чтобы файлы были для выбранного вами тега. Вы можете выбрать любой отдельный файл, и он откроется с программой по умолчанию, назначенной этому типу файла.
4. Исходный код:
tag_file.py
:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Serg Kolo
# Date: Oct 1st, 2016
# Description: tag_file.py, script for
# recording paths to files under
# specific , user-defined tag
# in ~/.tagged_files
# Written for: http://Ask-ubuntu.ru/q/827701/295286
# Tested on : Ubuntu ( Unity ) 16.04
from __future__ import print_function
import subprocess
import json
import os
import sys
def show_error(string):
subprocess.call(['zenity','--error',
'--title',__file__,
'--text',string
])
sys.exit(1)
def run_cmd(cmdlist):
""" Reusable function for running external commands """
new_env = dict(os.environ)
new_env['LC_ALL'] = 'C'
try:
stdout = subprocess.check_output(cmdlist, env=new_env)
except subprocess.CalledProcessError:
pass
else:
if stdout:
return stdout
def write_to_file(conf_file,tag,path_list):
# if config file exists , read it
data = {}
if os.path.exists(conf_file):
with open(conf_file) as f:
data = json.load(f)
if tag in data:
for path in path_list:
if path in data[tag]:
continue
data[tag].append(path)
else:
data[tag] = path_list
with open(conf_file,'w') as f:
json.dump(data,f,indent=4,sort_keys=True)
def get_tags(conf_file):
if os.path.exists(conf_file):
with open(conf_file) as f:
data = json.load(f)
return '|'.join(data.keys())
def main():
user_home = os.path.expanduser('~')
config = '.tagged_files'
conf_path = os.path.join(user_home,config)
file_paths = [ os.path.abspath(f) for f in sys.argv[1:] ]
tags = None
try:
tags = get_tags(conf_path)
except Exception as e:
show_error(e)
command = [ 'zenity','--forms','--title',
'Tag the File'
]
if tags:
combo = ['--add-combo','Existing Tags',
'--combo-values',tags
]
command = command + combo
command = command + ['--add-entry','New Tag']
result = run_cmd(command)
if not result: sys.exit(1)
result = result.decode().strip().split('|')
for tag in result:
if tag == '':
continue
write_to_file(conf_path,tag,file_paths)
if __name__ == '__main__':
main()
read_tags.py
:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Serg Kolo
# Date: Oct 1st, 2016
# Description: read_tags.py, script for
# reading paths to files under
# specific , user-defined tag
# in ~/.tagged_files
# Written for: http://Ask-ubuntu.ru/q/827701/295286
# Tested on : Ubuntu ( Unity ) 16.04
import subprocess
import json
import sys
import os
def run_cmd(cmdlist):
""" Reusable function for running external commands """
new_env = dict(os.environ)
new_env['LC_ALL'] = 'C'
try:
stdout = subprocess.check_output(cmdlist, env=new_env)
except subprocess.CalledProcessError as e:
print(str(e))
else:
if stdout:
return stdout
def show_error(string):
subprocess.call(['zenity','--error',
'--title',__file__,
'--text',string
])
sys.exit(1)
def read_tags_file(file,tag):
if os.path.exists(file):
with open(file) as f:
data = json.load(f)
if tag in data.keys():
return data[tag]
else:
show_error('No such tag')
else:
show_error('Config file doesnt exist')
def get_tags(conf_file):
""" read the tags file, return
a string joined with | for
further processing """
if os.path.exists(conf_file):
with open(conf_file) as f:
data = json.load(f)
return '|'.join(data.keys())
def main():
user_home = os.path.expanduser('~')
config = '.tagged_files'
conf_path = os.path.join(user_home,config)
tags = get_tags(conf_path)
command = ['zenity','--forms','--add-combo',
'Which tag ?', '--combo-values',tags
]
tag = run_cmd(command)
if not tag:
sys.exit(0)
tag = tag.decode().strip()
file_list = read_tags_file(conf_path,tag)
command = ['zenity', '--list',
'--text','Select a file to open',
'--column', 'File paths'
]
selected = run_cmd(command + file_list)
if selected:
selected = selected.decode().strip()
run_cmd(['xdg-open',selected])
if __name__ == '__main__':
try:
main()
except Exception as e:
show_error(str(e))
Я нашел способ сделать это.
Откройте терминал (CTRL+ALT+T) и затем выполните эту команду:
sudo add-apt-repository ppa:tracker-team/tracker
Введите свой пароль, и при появлении запроса нажмите Enter, затем запустите
sudo apt-get update
затем
sudo apt-get install tracker tracker-gui
Не волнуйтесь, если он говорит, что это уже последняя версия.
Теперь откройте Nautilus/Files и щелкните правой кнопкой мыши документ, к которому вы хотите добавить теги. Выберите свойства, затем выберите вкладку с надписью "Теги". Введите тег в текстовое поле и нажмите клавишу ввода или нажмите кнопку "Добавить", чтобы добавить его. Вы также можете щелкнуть тег, который вы уже добавили, и нажать кнопку "Удалить", чтобы удалить тег. Обратите внимание, что теги чувствительны к регистру. Создаваемые вами теги будут постоянными во всей системе, поэтому вы можете легко поставить галочку рядом с тегом, который вы уже создали, чтобы пометить файл, вместо того, чтобы снова вручную его вводить.
После добавления тегов к нужным элементам теперь вы можете искать их, но не в файлах. Перейти к деятельности, и искать приложение Desktop Search
, Запустите его и посмотрите на варианты сверху. В верхней левой части окна щелкните значок папки с подсказкой "Отображать результаты по файлам в списке". Теперь у вас есть больше вариантов. Выберите опцию слева от поля поиска с помощью всплывающей подсказки "Найти критерии поиска только в тегах файлов". Теперь вы можете искать теги!
Чтобы использовать это, введите теги, которые вы хотите найти, разделенные запятыми и нажмите Enter. Например:
Важно, сентябрь, презентация
Это покажет только файлы, которые имеют все три тега: "Важный", "Сентябрь" и "Презентация".
Если дважды щелкнуть один из них, он откроет файл в программе по умолчанию, а затем, щелкнув правой кнопкой мыши и выбрав "Показать родительский каталог", откроет свое местоположение в Nautilus.
В Desktop Search вы также можете нажать вторую кнопку справа вверху окна (обычно звезду или сердце), чтобы редактировать теги в самом приложении!
Вот оно! Надеюсь это поможет. Если у вас есть еще вопросы, дайте мне знать.
Краткий ответ: это невозможно изначально в Ubuntu. Вам нужно какое-то расширение или база данных документов, как предложено другими ответами.
Другой вариант, который я могу порекомендовать, - использовать приложение TagSpaces. Это приложение может сохранять теги в имени файла, что делает теги надежными и портативными. Вы можете редактировать имя файла в Nautilus или в облачном хранилище, и тег появится в TagSpaces и наоборот.
Apple реализует это в своей журналируемой файловой системе. Для Linux это пока не так. Конечно, для хранения ассоциаций нужна БД.
Итак, 2 рекомендации:
- Если файл представляет собой обычный текстовый файл, используйте вместо него Evernote или любое другое приложение для создания заметок, поддерживающее тегирование. Evernote потрясающий, я использую его уже много лет. Поиск происходит молниеносно, а теги очень легко поддерживать (с левой боковой панели).
- Если вы не хотите устанавливать какое-то другое недоделанное приложение, как было предложено выше (однако спасибо за это предложение), просто поместите теги вверху или внизу файла в одну строку и разделите их запятыми. Таким образом, вы сможете искать их в формате CSV, если помните последовательность, или просто включив отдельные теги, перед которыми стоит запятая, например: «обувь», «,рубашки». Я знаю, что это второе решение немного гетто, но оно будет работоспособным в небольших масштабах - ограниченное количество тегов, применяемых к ограниченному количеству файлов :)