Самый быстрый способ изменить dir из / xxxxx / foo / yyyyyy в / xxxxx / bar / yyyyyy

Используя bash, какой самый простой способ «заменить» данную часть текущего пути чем-то другим? Если мой текущий путь имеет форму /xxxxx/foo/yyyyy , как я могу перейти в каталог /xxxxx/bar/baz/yyyyy с кратчайшей командой?

  • Избегайте того, что Ctrl-C отключает печать ввода
  • Какой io-поток выполняет эту линию вывода с помощью dstat
  • bash: присвоение первой строке переменной переменной
  • Как найти bash в переносном режиме
  • Amigados назначает команду в linux bash
  • Ввод строк в историю bash
  • Как назвать файл на самом глубоком уровне дерева каталогов
  • Как команда выполняется после команды while, выполняемой над циклами?
  • 6 Solutions collect form web for “Самый быстрый способ изменить dir из / xxxxx / foo / yyyyyy в / xxxxx / bar / yyyyyy”

    Вы можете использовать функцию оболочки, чтобы предоставить вам эту возможность по мере необходимости:

     change() { path=`pwd`; cd `echo $path | sed "s/$1/$2/"`; } 

    Которое будет вызываться из / foo / bar / as:

     change "bar" "gazi" 

    Обратите внимание, что для этого примера «не нужны», но они потребуются для специальных строк, таких как каталоги с символами пробела в имени.

    Не так коротко, но работает: cd ${PWD/foo/bar\/baz}

     cd ../../bar/baz/yyyyy cd $(echo $PWD | sed 's|foo|bar/baz|') 

    Второй выглядит «более холодным», но первый короче.

    В zsh: cd foo bar

    В bash: cd `zsh -ci 'cd foo bar'`
    который можно укоротить до `zsh -ci 'cd foo bar'` под shopt -s autocd в bash ≥4. Добавьте двойные кавычки вокруг backquotes, если результат в. Это работает только в том случае, если zsh печатает каталог без ~ сокращений; альтернативно, zsh -c 'cd foo bar;pwd' печатает путь с аббревиатурами, но он начинает становиться длинным.

    В bash вы можете написать обертку вокруг встроенного cd который эмулирует поведение zsh.

     cd () { local -a opts opts=() while [[ $1 = -* ]]; do opts=("${opts[@]}" "$1"); shift; done if [[ $# -eq 2 ]]; then set -- "${PWD/$1/$2}" fi if [[ ${#opts[@]} -ne 0 ]]; then set -- "${opts[@]}" "$@" fi builtin cd "$@" } 

    Если вы изменили на /xxxxx/foo/yyyyy с помощью cd /xxxxx/foo/yyyyy и хотите изменить сразу после этой команды в другой каталог, вы можете использовать !!:s/foo/bar\/baz/ . Это означает, что повторите последнюю команду, но замените foo на bar/baz .

    Когда вы выполняете некоторые команды между двумя cd s, вы можете использовать !cd:s/foo/bar\/baz/ . Whats означает, повторите последнюю команду cd и замените.

    Еще несколько примеров и команд истории см. В Справочном руководстве Bash .

    Чтобы добавить к этой концепции использования истории, я рекомендую посмотреть команды pushd и popd в bash, которые могут очень легко переключаться между сохраненными каталогами. Ссылка на блог также очень хороший ресурс для других методов переключения каталогов, включая комментарии о том, как это сделать в скрипте.

    Linux и Unix - лучшая ОС в мире.