Попробуйте следующее:
find -maxdepth 1 -type f -name "file?" -exec sed -i.bak -e 's/de_hecklist/data/g; s/secry/send/g' {} +
Вы можете заменить -name "file?"
любым шаблоном, который соответствует вашим файлам, или полностью удалить его, чтобы отредактировать все файлы.
-maxdepth 1
предписывает find
не входить в подкаталоги, поэтому изменяются только файлы, соответствующие file?
в текущем каталоге.
Параметр -i.bak
в sed
создает резервную копию файлов. Вы можете удалить его, если вам не нужна резервная копия. Также обратите внимание, что этот параметр -i
( - in-place
) является расширением GNU sed
и, следовательно, не совместим с POSIX, но поскольку вы используете Linux , это не будет проблемой.
Я бы использовал для этого функцию, например:
gitmv()
{
# If in a git repo - call git mv. otherwise- call mv
if [ x`git rev-parse --show-toplevel 2> /dev/null` = x ];
then
mv "$@"
else
git mv "$@"
fi
}
Изменить:
alias mv = gitmv
Хотя jhscheer предложил гораздо лучшее решение (ИМХО ), все же можно добиться того, что вы пытались сделать, используя только псевдоним.
Ваш псевдоним не работает из-за внешних двойных кавычек, которые делают git mv
одиночный токен, и у вас нет git mv
исполняемого файла. Если вы удалите внешние двойные кавычки, ваш псевдоним должен работать нормально.
Кстати, внутренние двойные кавычки в echo "git mv"
бесполезны, но безвредны.
У меня нет git-репозитория, доступного для тестирования, но я только что попробовал использовать следующий псевдоним:
alias foo='$(if [ x"`pwd`" = x"$HOME" ] ; then echo echo; else echo echo foo; fi)'