Я отвечу на ваш общий вопрос о том, как делать множественные замены (в частности, при переименовании, хотя это может быть применимо и в других контекстах). Предположим, что у вас есть куча файлов. имена которых включают слова "over" и "dog", и вы хотите заменить их на "under" и "cat", соответственно.
for f in *
do
g=${f/over/under}
h=${g/dog/cat}
mv -- "$f" "$h"
done
(Правила --
защищают вас от нежелательного поведения
которое может быть вызвано именем файла, начинающимся с --
.
Если хотите, измените последнюю строку на mv -- "$f" "$h".jpg
).
Обратите внимание, что если имя файла содержит только "over" или "dog"
(но не оба), то будет произведена только одна из доступных замен.
Если имя содержит "dog" и "over" (в таком порядке),
он все равно выполнит замену.
В представленном вами случае, когда строки содержат "(" и ")",
вам может не понравиться такое поведение.
P.S. Реалистично,
вам, вероятно, следует защитить команду mv
следующим образом:
if [ "$f" != "$h" ] then if [ -e "$h" ] then (Error handling) else mv -- "$f" "$h" fi done
чтобы избежать получения сообщения об ошибке при попытке переименовать файл в сам себя
(потому что его имя не содержит ни одной из строк),
и чтобы избежать повреждения существующего файла.
(например, если у вас есть файл image(1)
и у вас уже есть файл image1.jpg
).
sed
for f in *
do
g=$(sed 's/\(.*\)over\(.*\)dog\(.*\)/\1under\2cat\3/' <<< "$f")
mv -- "$f" "$g"
done
Этот способ противоположен первому: он выполняет замену только в том случае, если слова "over" и "dog" оба появляются (в таком порядке) и не иначе.
Синтаксис <<<
("здесь строка") работает не во всех оболочках.
Чтобы сделать вышеописанное в оболочке, которая не поддерживает строки here, сделайте:
for f in *
do
g=$(printf "%s" "$f" | sed 's/\(.*\)over\(.*\)dog\(.*\)/\1under\2cat\3/')
mv -- "$f" "$g"
done
Это известная проблема. Иногда checkinstall нарушает установку из-за отсутствия папки. Он также (по какой-то причине) отказывается создавать новую папку, хотя у него есть необходимые разрешения для ее создания. В этом случае все, что вам нужно сделать, это создать папку вручную. В этом случае создайте папку /home/alexandre/gcc-6.2.0/lib/gcc/x86_64-pc-linux-gnu/6.2.0
и установите разрешение вручную.
sudo mkdir /home/alexandre/gcc-6.2.0/lib/gcc/x86_64-pc-linux-gnu/6.2.0
sudo chmod 644 /home/alexandre/gcc-6.2.0/lib/gcc/x86_64-pc-linux-gnu/6.2.0
Другая возможность заключается в том, что вы могли пропустить шаг настройки перед установкой. Пожалуйста, попробуйте выполнить конфигурирование с помощью
./configure --disable-static
, перекомпилировать его и установить с помощью checkinstall.