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

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

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, которые могут очень легко переключаться между сохраненными каталогами. Ссылка на блог также очень хороший ресурс для других методов переключения каталогов, включая комментарии о том, как это сделать в скрипте.

  • bash throwing "ignored null byte in input" предупреждение в скрипте
  • Сценарии Bash: использование forinloop с массивом
  • Bash: как получить первое число, которое встречается в содержимом переменной
  • Изменение расширений файлов
  • Странное поведение в $ (dirname `readlink -f $ 0`)
  • доступ к переменной цикла в цикле
  • Как сделать строку «1.9.2» Ruby для окончательной версии с RVM?
  • Не удалось объединить 2 переменные
  • В то время как порождает подоболочку в bash?
  • clean script, чтобы рекурсивно заменить строку во всех каталогах и именах файлов
  • Является ли оболочка созданной `bash -i -c <command>` интерактивной?
  • Как сохранить строку «*» в переменной в unix / bash?
  • Interesting Posts

    Проблема с символом ':' в скрипте Bash через SSH

    Как выводить сравнение значений в отдельных файлах

    Выполняет ли синхронизация команду удалить грязный кэш в памяти?

    Запускайте только приложения X11 с настраиваемым размером шрифта и стилем шрифта

    Обнаружение оболочки по умолчанию пользователя в сценарии оболочки

    find: отсутствует аргумент `-exec 'в Cygwin

    Драйверы Vega 56, отсутствует прошивка

    Как создать точку доступа WLAN на ноутбуке в XFCE4?

    Ubuntu – Xrandr не меняет свое разрешение

    Как я могу удаленно получить доступ к веб-сайту интрасети из внешней сети через туннель SSH?

    Arch Linux в UEFI не загружается

    Как просмотреть только специальный контент в файле журнала?

    процессор (ы), который составляет один день

    USB-клавиатура работает с перебоями в GRUB 2 при перезагрузках – как заставить ее работать последовательно?

    Улучшения полосы пропускания ожидаются от перехода на Wayland или Mir?

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