Найти файл и переименовать его одной командой в bash

Вы не используете bash, или вы используете более старую версию bash, или оболочку, которая не понимает расширения фигурных скобок.

Наиболее вероятное объяснение состоит в том, что ваш эмулятор терминала работает /bin/shили какая-то оболочка меньшего размера (, которая, как мы надеемся, по-прежнему в основном совместима с POSIX ).

Вbash(и любой другой оболочке, которая поддерживает раскрытие фигурных скобок ), ваш явный цикл for -может быть заменен неявным циклом:

printf 'Welcome %d\n' {1..4}

или

printf 'Welcome %d\n' $(seq 4)

если у вас нет раскрытия скобок, но есть seq.

0
01.08.2019, 23:22
2 ответа

Вы можете использовать флаг execdir.

  find. -type f -name <original_file_name> -execdir mv {} <new_file_name> \;
2
28.01.2020, 02:22

Если вы хотите переименовать 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 {} \;
2
28.01.2020, 02:22

Теги

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