Поэтому я задал этот вопрос о том, как найти каталог, содержащий определенный символ.

Теперь я хотел бы изменить этот символ на что-то другое (не полное имя, а только этот символ)

Пример:

find "a"
     aaa 
     bab
replace with "c"
     ccc
     bcb

Как я могу это сделать?

Это код, который у меня есть банкомат

read -p "find what character: " findwhat
find . -name "*$findwhat*" -type d -print

1 ответ1

0

Один из подходов заключается в использовании rename (он же prename). Заменить _ на -:

rename 's/_/-/g' dirname

(g заменяет все вхождения. Опустите это, если вы хотите заменить только одно вхождение)

Объединяя это с вашим оператором find :

find . -name "*$findwhat*" -type d -execdir rename "s/$findwhat/$replacewith/g" {} \;

Возможно, вам придется изменить это, чтобы подстановка переменных работала правильно.

Примечание: {} указывает -execdir/-exec куда вставить имя файла в команде; ; сообщает ему, где заканчиваются команды - и вам нужно экранировать его с помощью \ потому что в противном случае оболочка будет рассматривать его как разделитель команд.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .