Как пометить все, что хранится в файловой системе Linux?

Вам нужно протестировать массив, а не (только) элемент 0.

[[ -v array[@] ]] 

Это не удается:

$ declare -A array=(["a"]="element 1")
$ declare -p array
declare -A array=([a]="element 1" )

$ [[ -v array ]] && echo yes            # nothing is printed.

Но это работает:

$ [[ -v array[@] ]] && echo yes
yes

Итак измените свою функцию на:

function is_var_set {
    local avar="${1:?"No var provided to 'is_var_set'!"}[@]"
    [[ -v "$avar" ]]
}

Проверьте это с помощью этого сценария:

function is_var_set {
    local avar="${1:?"No var provided to 'is_var_set'!"}[@]"
    [[ -v "$avar" ]] && echo "$1 set: yes" || echo "$1 set: no"
    echo
}

var=wer
echo "array scalar $(declare -p var)"
is_var_set var

var=( foo bar baz )
echo "var indexed array $(declare -p var)"
is_var_set var

unset var
echo "var associative array $(declare -p var)"
is_var_set var

declare -A var=(["a"]="element 1")
echo "var associative array $(declare -p var)"
is_var_set var
2
24.08.2017, 15:22
2 ответа

Что касается простой маркировки файлов, основной вопрос заключается в том, где/как хранятся метки? Если файловая система не имеет встроенной поддержки тегов разнородных типов файлов, можно найти два распространенных (, хотя и далеких от идеальных )подхода, — это встраивание имен файлов и боковые панели .. Первое означает, что ваши теги фактически вставлены в имя файла, например. foo.txt становится foo -[tag1,tag2].txt . Последний, sidecar, означает, что теги хранятся в файле, расположенном в том же каталоге или общем подкаталоге, что и файл, который нужно пометить. Например, foo.txt может сопровождаться .foo.txt.tags .

Ни один из них не кажется слишком привлекательным, не так ли? Встраивание кажется мне просто уродливым, но, по крайней мере, вам не нужно беспокоиться о том, как сохранить ваши теги с файлом, если вы переместите или удалите его, как в случае с sidecars.

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

Я слышал положительные отзывы об открытом -исходном коде, межплатформенном -решении под названием TagSpaces . По умолчанию используется встроенный подход, но есть версия для Enterpri$e с поддержкой sidecars. Набор функций привлекателен, а пользовательский интерфейс выглядит красиво, а также прост в использовании. Также есть API , если вы хотите интегрироваться с другими клиентами или создавать свои собственные (, например. Командная строка ). И есть кое-что, что следует сказать о кросс-платформенном -аспекте, если вы хотите хранить свои файлы более чем на одной платформе.

Для этого и других подобных решений все сводится к тому, сможете ли вы жить с... давайте посмотрим правде в глаза... довольно хакерские детали сохраняемости тегов!:)

Редактировать:Вот некоторая информация от того, кто использует встроенные теги:Добавление тегов к файлам (PDF-файлы )и обработка из командной строки -или скрипта Остальная часть потока может тоже представлять интерес.

3
27.01.2020, 21:58

Возможно использование расширенных атрибутов, см. введение в xattr (7 ).

(Но я считаю, что сегодня они широко не используются; в Debian и родственных дистрибутивах вам необходимо установить пакет xattr, а затем использовать команду xattr)

3
27.01.2020, 21:58

Теги

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