Intereting Posts
unix: заменить один полный столбец в одном файле одним значением из другого файла воссоздать mysqld файл centos Как извлечь неизвестные аргументы в сценарии оболочки? Команда запуска, когда температура превышает пороговое значение, без демона Поиск греческого из командной строки Невозможно создать загрузочный USB для PCBSD Как я могу прокручивать строки файла и находить файлы, соответствующие каждой строке? Linux Image для воссоздания машины с той же конфигурацией На месте модернизация массива программных RAID-массивов 5 Очистить каталог $ HOME Приостановить QEMU / KVM VM (сохранить RAM и состояние процессора на диск), например, vmware Player? Автомонтирует CIFS при загрузке? Подсчитывать запущенные процессы с использованием wc и ps Как найти номер строки в Bash при возникновении ошибки? Файл не отображается с помощью vi, но отображается с помощью команды ls -l CD *

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

Мне нужна помощь в переименовании файлов в пакетном режиме – другие вопросы, которые я просматривал, не соответствуют моей проблеме. Имена моих файлов генерируются недетерминированно, поэтому я не могу предсказать, на что они будут называться. Я знаю, что они начнут с NORMAL и заканчиваются на -lib* . Я бы хотел заменить все между ними некоторой строкой X Например,

 | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.concordant | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.deletion | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.divergent | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.inversion | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.translocation | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.concordant | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.deletion | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.divergent | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.insertion | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.inversion | | |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.translocation 

Поэтому он, вероятно, будет иметь вид rename "s/something/X/" , но я не знаю, что это должно быть, поскольку я не знаю, как использовать регулярное выражение.

Если вам посчастливилось rename , то должно быть достаточно:

 rename 's/(NORMAL).*(-lib)/$1X$2/' * 

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

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

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

Существуют две несвязанные программы, называемые rename . Тот, что найден на 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 . Это стандартный синтаксис расширения параметров .

Эта задача проще всего в zsh, с ее функцией zmv . Поместите autoload -U zmv в ваш .zshrc (или запустите его в командной строке для .zshrc выключения), затем запустите

 zmv 'NORMAL_*-(lib*)' 'NORMAL_X-$1' 

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