Назад | Перейти на главную страницу

Linux, поиск расширенного значения атрибута

Когда каталог содержит файлы с непустыми расширенными атрибутами, все значения атрибутов могут быть показаны следующим образом:

$ getfattr -d *
# file: file1
user.comment="comment1"

# file: file2
user.comment="comment2"

Это должно работать для всех дистрибутивов Linux.

Можно ли перечислить только те файлы, user.comment расширенный атрибут имеет определенное значение, например comment1? Если да, то как?

Один из способов - сбросить расширенные атрибуты в файл, а затем использовать awk

getfattr --dump * > xfatrrts.txt

или с функцией bash

 ea_query() {
    a=$1; v=$2
    shift 3
    getfattr -n $a $* |
    awk "BEGIN  {
      RS="# file: "
      FS="n"
   }/="$v"/ { print $1 }"
}

а потом

cp `ea_query user.important yes *.txt` important_texts/

В zsh

fattr() {
  local val=$(getfattr -e text -n user.$1 --only-values $REPLY 2>/dev/null)
  [[ -n $val && ( -z $2 || $val = $2 ) ]]
}

А потом

ls *(e:fattr year 2020:) 

Здесь вы найдете еще несколько решений https://linux-user.gr/t/ektetamenes-idiothtes-archeiwn/2379 (по-гречески).

Попробуйте выпустить getfattr -n user.comment --only-values * | grep -B 1 "comment1"

Это отобразит user.comment значения всех файлов и отфильтруйте вывод с помощью grep. Конечно, вы можете использовать более сложные подходы, например, с find -exec