Если Вы используете su
для входа в систему как корень затем это происходит, вероятно, из-за использования pam_xauth
настраивать новый xauthority файл для той сессии, как описано в этом старом почтовом потоке.
Если вам повезло, что у вас есть переименование
, то достаточно следующего:
rename 's/(NORMAL).*(-lib)/$1X$2/' *
Вы можете использовать поисковые запросы , например (? <= NORMAL). *? (? = - lib)
т.е.
$ rename -v -n -- 's/(?<=NORMAL).*?(?=-lib)/X/' *
NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.insertion renamed as NORMALX-lib4.insertion
NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.inversion renamed as NORMALX-lib4.inversion
NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.translation renamed as NORMALX-lib4.translation
Есть две несвязанные программы под названием переименование
. Одна из них, найденная в Debian и производных (Ubuntu, Mint, ...), является Perl-скриптом, и её первым аргументом является выражение на Perl, которое преобразует старое имя в новое. С помощью этого скрипта можно сделать
rename 's/.*-lib/NORMAL_X-lib/' NORMAL_*-lib*
Оператор s
выполняет замену регулярного выражения. В сети существуют удлы уроков регулярных выражений, например 1. .*-lib
соответствует строке до последнего появления -lib
(.*
соответствует любой строке), поэтому s/. *-lib/NORMAL_X-lib/
заменяет часть NORMAL_blahblah-lib
на NORMAL_X-lib
.
Если у вас есть дистрибутив Linux, который не является производным от Debian, то утилита rename
подходит практически для любых практических задач. Вместо этого вы можете использовать цикл командной строки.
for x in NORMAL_*-lib*; do
mv "$x" "NORMAL_X-lib${x##*-lib}"
done
${x##*-lib}
- это значение переменной x
минус часть до последнего появления -lib
. Это стандартный синтаксис расширения параметра -lib.
Самая простая задача в zsh, с его функцией zmv
. Поместите autoload -U zmv
в свой .zshrc
(или запустите его в командной строке для одноразового отключения), затем запустите
zmv 'NORMAL_*-(lib*)' 'NORMAL_X-$1'
Полезное переименование на Perl-носителях
не всегда доступно на всех дистрибутивах. Например, Fedora и CentOS (и предположительно RedHat) используют базовую утилиту rename
, которая выполняет базовый поиск и замену, и ничего больше.
Если вы, к сожалению, используете одну из них, то вам может помочь следующее:
for oldname in *; do
newname=$(echo "$oldname" | sed -e 's/\(NORMAL\).*\(-lib.*\)/\1X\2/')
mv "$oldname" "$newname"
done