Вы не используете bash
, или вы используете более старую версию bash
, или оболочку, которая не понимает расширения фигурных скобок.
Наиболее вероятное объяснение состоит в том, что ваш эмулятор терминала работает /bin/sh
или какая-то оболочка меньшего размера (, которая, как мы надеемся, по-прежнему в основном совместима с POSIX ).
Вbash
(и любой другой оболочке, которая поддерживает раскрытие фигурных скобок ), ваш явный цикл for -может быть заменен неявным циклом:
printf 'Welcome %d\n' {1..4}
или
printf 'Welcome %d\n' $(seq 4)
если у вас нет раскрытия скобок, но есть seq
.
Вы можете использовать флаг execdir
.
find. -type f -name <original_file_name> -execdir mv {} <new_file_name> \;
Если вы хотите переименовать file.conf
в file2.conf
, используйте find
с опцией -exec
:
find. -name "*.conf" -type f -exec sh -c 'mv "$1" "${1%.conf}2.conf"' sh {} \;
Каждое имя файла {}
передается как параметр $1
в новый процесс оболочки, запущенный с опцией -exec
, где выполняется команда mv
.
${1%.conf}
является расширением параметра оболочки и удаляет суффикс .conf
из имени файла 2.conf
добавляет новый суффикс к имени файла Если вы хотите проверить свою команду перед ее выполнением, добавьте к ней echo
, например:
find. -name "*.conf" -type f -exec sh -c 'echo mv "$1" "${1%.conf}2.conf"' sh {} \;