Объем переименовывает, префикс изменения

Можно использовать DEBIAN_FRONTEND переменная среды.

DEBIAN_FRONTEND=noninteractive aptitude -y install mysql-server > /dev/null 2>&1

или если Вы выполните больше чем 1 установку, Вы могли бы хотеть добавить экспорт в верхнюю часть Вашего сценария

export DEBIAN_FRONTEND=noninteractive
aptitude -y install mysql-server > /dev/null 2>&1
56
07.09.2012, 01:41
7 ответов
for name in TestSR*
do
    newname=CL"$(echo "$name" | cut -c7-)"
    mv "$name" "$newname"
done

Это использует замену команды удара для удаления первых 6 символов из входного имени файла через cut, предварительно ожидает CL к результату и хранилищам это в $newname. Затем это переименовывает старое название к новому имени. Это выполняется на каждом файле.

cut -c7- указывает, что только символы после индекса 7 должны быть возвращены из входа. 7- диапазон, запускающийся в индексе 7 без конца; то есть, до конца строки.

Ранее, я использовал cut -b7-, но -c должен использоваться вместо этого для обработки кодировок символов, которые могли иметь несколько байтов на символ, как UTF-8.

39
27.01.2020, 19:33
  • 1
    Спасибо, я получил это прямо сейчас один также. Отмечание как ответ. Спасибо –  ErikTJ 06.09.2012, 19:35
  • 2
    Это работает приятно, спасибо. Можно ли объяснить, что делает-b7-? Действительно ли это - ссылка на список байта? ss64.com/bash/cut.html –  imjared 26.09.2013, 19:01
  • 3
    @imjared Обновил ответ с большим количеством деталей. –  mrb 26.09.2013, 20:08

Расширение параметра Shell достаточно для простых преобразований как это. Замена команды менее эффективна из-за потребности породить дополнительные процессы (для самой замены команды и cut/sed).

for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
34
27.01.2020, 19:33

Я сказал бы что самое простое это, чтобы просто использовать rename команда, которая распространена на многих дистрибутивах Linux. Существует две общих версии этой команды, так проверьте ее страницу справочника для нахождения, какой Вы имеете:

## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *

## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *

Если Вы хотите использовать версию из util-linux-ng в системе Debian, это доступно под именем rename.ul

57
27.01.2020, 19:33
  • 1
    протест: несколько версий rename существуйте в дикой природе. Проверьте свое локальное rename документация, чтобы выяснить, как использовать Ваш. –  jw013 06.09.2012, 20:39
  • 2
    Для удаления псевдонима делают rename TestSR '' * –  Bsienn 21.09.2017, 10:38

Можно попробовать:

for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done

Посмотрите man bash (раздел "Parameter Expansion") для деталей.

3
27.01.2020, 19:33

Вот один путь:

ls *.{h,m} | while read a; do n=CL$(echo $a | sed -e 's/^Test//'); mv $a $n; done
  • ls *.{h,m} -> Находят все файлы с.h или расширением.m
  • n=CL -> Добавляют префикс CL к имени файла
  • sed -e 's/^Test//' -> Удаляет Тестовый префикс из имени файла
  • mv $a $n -> Выполняет переименовывание
4
27.01.2020, 19:33

Если Вам нужно что-то, больше погибают, можно сделать это

perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' *
1
27.01.2020, 19:33

Ну, это не было настолько же твердо как я все же.

$ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done;
$ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done;
1
27.01.2020, 19:33
  • 1
    В случае, если это помогает для будущего, Вы не должны повторять команды для своих двух шаблонов; можно использовать (например): for f in TestSR*.[mh], for f in TestSR*.{m,h}, for f in TestSR*.m TestSR*.h. –  mrb 07.09.2012, 01:37

Теги

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