Итак, причина, по которой приведенный выше код не работал, заключалась в том, что файл с именем "org.gnome.extensions.user -theme.gschema.xml" отсутствовал в "/usr/share/glib -2.0/schemas/" .
Для решения проблемы выполните следующий код:
sudo cp $HOME/.local/share/gnome-shell/extensions/user-theme@gnome-shell-extensions.gcampax.github.com/schemas/org.gnome.shell.extensions.user-theme.gschema.xml /usr/share/glib-2.0/schemas
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
Если ваши имена файлов не содержат символов новой строки и в вашей системе установлена GNU stat
, вы можете:
filenames
stat
для печати размера и имени каждого файла, затем используйте sort
для результата (обратного числового )и затем удалите первое поле (размер )с cut
, чтобы получить имена файлов, упорядоченные по размеру (самый большой первый ). while
для дальнейшей обработки. filenames=( one two three )
while IFS= read -r file; do
echo "do something with $file"
done < <(stat --printf '%s\t%n\n' -- "${filenames[@]}" | sort -nr | cut -f2-)
То же, что и выше, но с использованием нулевого символа в качестве разделителя (, если вы не можете гарантировать, что ваши имена файлов не будут содержать новые строки; вам также понадобятся GNU sort
и GNUcut
):
filenames=( one two three )
while IFS= read -r -d $'\0' file; do
printf 'do something with %s\n' "$file"
done < <(stat --printf '%s\t%n\0' -- "${filenames[@]}" | sort -znr | cut -zf2-)
Обратите внимание, что для имен файлов типа символическая ссылка учитывается размер самой ссылки (, а не файла, на который она указывает ). Добавьте опцию -L
к stat
, чтобы изменить это.
Обратите внимание, что это не будет работать для файла с именем -
, так как stat
интерпретирует его как файл, открытый на стандартном вводе. Вместо этого используйте ./-
, чтобы обойти это.
С zsh
тот же метод, что и в , который отвечает на аналогичный вопрос о сортировке по mtime , сам адаптирован из этого для сортировки массивов на основе произвольных порядков (подробности см. в последнем):
zmodload zsh/stat
array=(one two three...)
# store sizes in an "A"ssociative array:
typeset -A size
stat -nL -A size +size -- $array
# sort using the oe glob qualifier "n"umerically
sorted_array=(/(e['reply=($array)']noe['REPLY=$size[$REPLY]'])