if-then-else внутри Bash Alias ​​

Попробуйте следующее:

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 , это не будет проблемой.

6
13.03.2017, 21:05
2 ответа

Я бы использовал для этого функцию, например:

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

8
27.01.2020, 20:25

Хотя jhscheer предложил гораздо лучшее решение (ИМХО ), все же можно добиться того, что вы пытались сделать, используя только псевдоним.

Ваш псевдоним не работает из-за внешних двойных кавычек, которые делают git mvодиночный токен, и у вас нет git mvисполняемого файла. Если вы удалите внешние двойные кавычки, ваш псевдоним должен работать нормально.

Кстати, внутренние двойные кавычки в echo "git mv"бесполезны, но безвредны.

У меня нет git-репозитория, доступного для тестирования, но я только что попробовал использовать следующий псевдоним:

alias foo='$(if [ x"`pwd`" = x"$HOME" ] ; then echo echo; else echo echo foo; fi)'
1
27.01.2020, 20:25

Теги

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