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

Используя zsh, с setopt EXTENDED_GLOB, использование ~ оператор (кроме)

rm -- *~(x|y|z)

или ^ оператор (отрицание):

rm -- ^(x|y|z)

Но, необходимо, вероятно, вместо этого переместить файлы в другое место, затем удалить все. Это намного более безопасно с точки зрения промахов пальца, таково как удар, входят слишком скоро.

4
06.01.2011, 14:45
6 ответов

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

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

Который назвали бы от/foo/bar/как:

change "bar" "gazi"

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

3
27.01.2020, 20:48
  • 1
    Добавленный function cdd(){ cd ${PWD/$1/$2}; } к моему .bashrc.Спасибо! –  Xavier Nodet 06.01.2011, 17:03
  • 2
    я не думаю, что это работает всегда правильно. Например, это изменило бы путь от /foosomething/foo в /bar/bazsomething/bar/baz. –  svick 06.01.2011, 18:48

Не настолько короткий, но работы: cd ${PWD/foo/bar\/baz}

3
27.01.2020, 20:48
cd ../../bar/baz/yyyyy
cd $(echo $PWD | sed 's|foo|bar/baz|')

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

2
27.01.2020, 20:48

В zsh: cd foo bar

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

В ударе Вы могли записать обертку вокруг 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 "$@"
}
2
27.01.2020, 20:48

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

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

Еще для некоторых примеров и команд истории, смотрите на Справочник Bash.

0
27.01.2020, 20:48

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

0
27.01.2020, 20:48

Теги

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