CLI Equivalent последних файлов файлов GNOME

Предлагаю взглянуть на Atom . Это отличный текстовый редактор со встроенным предварительным просмотром уценки. Я обычно не использую режим предварительного просмотра уценки, так как в нем есть серьезная ошибка - разрывы строк (если они не попадают парами, что указывает на содержимое тега

) сохраняются в предварительном просмотре. Но режим подсветки синтаксиса настолько хорош (поскольку Markdown оптимизирован для чтения человеком, а раскраска Atom превосходна), что я обычно заканчиваю чтение файлов уценки в режиме просмотра исходного кода.

4
22.09.2018, 13:00
3 ответа

Вероятно, это не сработает идеально, но это только начало.:

#!/bin/sh

recent_dir=$HOME/recent

mkdir -p "$recent_dir" || exit 1

find "$recent_dir" -type l -ctime +1 -delete

find "$HOME" -type f -mtime -1 -exec sh -c '
    dir=$1; shift
    for pathname do
        link=$dir/${pathname##*/}
        [ -h "$link" ] && continue
        ln -s "$pathname" "$link"
    done' sh "$recent_dir" {} +

Этот сценарий создаст и будет использовать каталог с именем recentв вашем домашнем каталоге (. Убедитесь, что этот каталог еще не существует, или измените имя в сценарии ).

Он начинается с удаления символических ссылок в каталоге recent, которые старше одного дня.

Затем он находит все обычные файлы (только )в вашем домашнем каталоге или ниже, которые были изменены за последние 24 часа, и для каждого такого файла создает символическую ссылку в каталоге recent.

Если два или более файла имеют одинаковое имя файла, выигрывает первый найденный файл.

Сценарий также будет обрабатывать скрытые файлы и файлы в скрытых каталогах.

Чтобы исключить каталоги из поиска, используйте, например,.

find "$HOME" -type d \( -name '.*' -o -name '*-mail' \) -prune \
    -o -type f -mtime -1 -exec sh -c...as before...

Это исключит скрытые каталоги и любой каталог, имя которого заканчивается на -mail.

Чтобы первый findтакже очищал символические ссылки на перемещенные или удаленные файлы, измените его на

find "$recent_dir" -type l \( -ctime +1 -o ! -exec test -f {} \; \) -delete
1
27.01.2020, 20:50

В идеале эквивалент CLI должен делать это черезgvfsсхемы , чтобы иметь возможность использовать recent:///местоположение в качестве аргумента, например. как упоминалось здесь

nautilus recent:///

или 1

gio open recent:///

открывает недавно использованные файлы в nautilusтак же, как если бы вы использовали кнопку Recentна боковой панели.
В вашем случае это мало поможет, так как вам нужен 2 инструмент командной строки, который понимает gvfsсхемы, и единственный, о котором я знаю, это вышеупомянутый gio. Вы можете бежать

gio list recent:///

, но вывод будет бесполезен, так как вы получите только внутренние представления gioэтих путей. Чтобы увидеть, что они вам соответствуют, вы можете использовать

gio tree recent:///

но это по-прежнему практически непригодно для использования, если вы не выполняете интенсивный анализ/обработку вывода. Однако вы можете написать свой собственный инструмент, который использует GtkRecentManager, чтобы делать то, что вы хотите. Чтобы вы начали, вот очень простой пример вpython(без проверки ошибок, целевой каталог должен существовать и быть пустым и т. д.):

#!/usr/bin/env python

import gi,sys
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk,Gio
from sys import argv

tg_dir = argv[1]
rec_mgr = Gtk.RecentManager.get_default()
for item in rec_mgr.get_items():
    if item.exists():
        uri = item.get_uri()
        tg = Gio.File.new_for_uri(uri)
        tg_path = tg.get_path()
        b_name = tg.get_basename()
        dt_path = tg_dir + "/" + b_name
        dt = Gio.File.new_for_path(dt_path)
        dt.make_symbolic_link(tg_path, cancellable=None)

Если вы сохраните это, например, как. my_linkerв вашем PATHи запустите его с путем к каталогу в качестве аргумента

my_linker /path/to/symlinks

он создаст символические ссылки на самые последние использовавшиеся файлы в этом каталоге.


1:gvfs-openустарело
2 :Я не знаком сemacs-возможно, все это можно было бы сделать с помощью плагинов или расширений... Хотя я не знаю...

4
27.01.2020, 20:50

Это возьмет недавно -использовавшиеся файлы, указанные в~/.local/share/recently-used.xbel(или, скорее, ${XDG_DATA_HOME}/recently-used.xbel), и свяжет их все в каталог с именем~/recent:

#!/bin/sh
set -e
mkdir -p ~/recent
rm -f ~/recent/*       # Make sure you don’t have anything you care about here
xmlstarlet sel -t -m '/xbel/bookmark[starts-with(@href, "file://")]' \
    -v 'substring(@href, 8)' -n ${XDG_DATA_HOME:-~/.local/share}/recently-used.xbel |
python -c "import sys, urllib as ul;
sys.stdout.write(ul.unquote(sys.stdin.read().replace('\n', '\0')));" |
xargs -0 ln -st ~/recent

Это использует XMLStarlet для извлечения URI файлов из списка недавно -использованных документов (, игнорируя другие URI ), передает их в сценарий Python, который заменяет символы новой строки нулевыми символами и затем снимает кавычки с экранированными URI (, например+или %20вместо пробела )и, наконец, передает его в xargs, который разбивает все имена файлов и передает их вln(вариант GNU )для создания символических ссылок.

Обратите внимание, что ссылки будут создаваться независимо от того, существует ли еще целевой файл; часто бывает так, что список недавно -использовавшихся файлов содержит временные файлы, которые с тех пор были удалены.

4
27.01.2020, 20:50

Теги

Похожие вопросы