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

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

  • что не так с моим простым сценарием меню выбора?
  • Распространено ли разделение большего скрипта на несколько сценариев и источник их в главном скрипте?
  • Попытка генерировать случайный проход для пользователей и сохранять их в файле
  • bash: файл mv с апострофом в имени файла
  • Использование инструкции if с помощью или для проверки аргументов для сценария оболочки
  • добавление пути к файлу в файлы
  • Как я могу ссылаться на все файлы, включая скрытые файлы?
  • Получить свободное пространство в текущем каталоге в Bash
  • 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, которые могут очень легко переключаться между сохраненными каталогами. Ссылка на блог также очень хороший ресурс для других методов переключения каталогов, включая комментарии о том, как это сделать в скрипте.

    Interesting Posts

    Как обрабатывать в реальном времени dd?

    «Interact» работает не так, как ожидалось, в сценариях bash / expect

    как сравнить два xml-файла с одинаковыми данными в разных строках?

    Есть ли причина, по которой я не могу подключиться с префиксом в этом сценарии?

    Преобразование файлов в OGG с помощью FFMPEG создает чрезвычайно большой файл

    Как удалить папки, созданные с именами дат 2016-04-03 до 2016-10-4

    «Система сейчас идет на перезагрузку»

    Установка моей переменной, я использую точечную нотацию или ~?

    Имитировать предупреждение идентификации удаленного хоста

    Альтернатива имени хоста для системного bashrc

    Среда LXDE выглядит и ведет себя как openbox

    переместить структуры ext4, чтобы выжить усечение

    Как запустить простую программу Java с помощью команды терминала?

    Где я могу узнать больше о том, как использовать команду GRUB `ntldr` (модуль?)

    Проблемы с компоновкой изображения и локали Docker CentOS7

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