Это сортировка путем добавления к путям к файлам базового имени, сортировки в числовом виде, а затем удаления базового имени из начала строки:
#!/bin/bash
#
filearray=("dir1/0010.pdf" "dir2/0003.pdf" "dir3/0040.pdf" "dir4/0003.pdf")
sortarray=($(
for file in "${filearray[@]}"
do
echo "$file"
done |
sed -r 's!^(.*)/([[:digit:]]*)(.*)$!\2 \1/\2\3!' |
sort -t $'\t' -n |
sed -r 's![^ ]* !!'
))
for item in "${sortarray[@]}"
do
echo "> $item <"
done
Было бы более эффективно, если бы у вас были имена файлов в списке, который можно было бы передавать напрямую через канал, а не как массив оболочки, потому что фактическая работа выполняется структурой sed | sort | sed
, но этого достаточно.
Впервые я столкнулся с этой техникой, когда программировал на Perl; на этом языке это было известно как Преобразование Шварца .
В Bash приведенное здесь преобразование в моем коде завершится ошибкой, если в базовом имени файла не -числа. На Perl это можно было бы закодировать гораздо безопаснее.
Вы хотите создать файл /etc/profile.d/umask.sh
, содержащий настройку UMASK -. Все файлы, соответствующие /etc/profile.d/*.sh
, обычно имеют источник /etc/profile
.
Вы также можете установить его непосредственно в /etc/profile
, но в будущем он может быть перезаписан системными обновлениями.
Если вы работаете в многопользовательской системе или управляете одной, вы можете установить umask
на 077
, чтобы запретить новые созданные файлы и папки, которые только владелец может читать/записывать/выполнять.
Измените разрешения на 022
, если вы хотите установить некоторые пакеты.
Отказ от ответственности :Я не очень понимаю ваш пост, так что это просто для того, чтобы дать вам некоторое представление о практике, которую я использовал.
Файл /etc/login.defs
является файлом конфигурации для файла конфигурации набора теневых паролей. Изman login.defs
:
This page is part of the shadow-utils (utilities
for managing accounts and shadow password files)
project.
Much of the functionality that used to be
provided by the shadow password suite is now
handled by PAM. Thus, /etc/login.defs is no
longer used by passwd(1), or less used by
login(1), and su(1). Please refer to the
corresponding PAM configuration files instead.
По-видимому, значение UMASK
в /etc/login.defs
не читается login
. Но он читается модулем pam_umask
PAM, если модуль используется.