Переименование нескольких файлов с переименовывает

Если Вы используете su для входа в систему как корень затем это происходит, вероятно, из-за использования pam_xauth настраивать новый xauthority файл для той сессии, как описано в этом старом почтовом потоке.

5
17.11.2018, 04:21
4 ответа

Если вам повезло, что у вас есть переименование , то достаточно следующего:

rename 's/(NORMAL).*(-lib)/$1X$2/' *
1
27.01.2020, 20:40

Вы можете использовать поисковые запросы , например (? <= 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
0
27.01.2020, 20:40

Есть две несвязанные программы под названием переименование . Одна из них, найденная в 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'
1
27.01.2020, 20:40

Полезное переименование на Perl-носителях не всегда доступно на всех дистрибутивах. Например, Fedora и CentOS (и предположительно RedHat) используют базовую утилиту rename, которая выполняет базовый поиск и замену, и ничего больше.

Если вы, к сожалению, используете одну из них, то вам может помочь следующее:

for oldname in *; do
    newname=$(echo "$oldname" | sed -e 's/\(NORMAL\).*\(-lib.*\)/\1X\2/')
    mv "$oldname" "$newname"
done
2
27.01.2020, 20:40

Теги

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