Я имею дело с проектами Java, которые часто приводят к вложенным папкам (/path/to/project/com/java/lang/ что угодно и т.д.) И иногда хотят иметь возможность перейти, скажем, на 4 уровня каталога вверх. Набрав cd ../ ../ ../ .. это боль, и я не хочу символическую ссылку. Есть ли какой-нибудь флаг для cd, который позволяет вам подняться на несколько уровней каталогов (в моей голове это будет что-то вроде cd -u 4)? К сожалению, я не могу найти какую-либо справочную страницу для CD, а просто получаю бесполезную "встроенную" страницу.
13 ответов
Или ... попробуйте это: (yay Google)
Перейдите вверх по каталогу, используя ..n:
В приведенном ниже примере ..4 используется для повышения уровня каталогов на 4, ..3 для повышения уровня каталогов на 3, ..2 для повышения уровня каталогов на 2.
Добавьте следующий псевдоним в .bash_profile и заново войдите в систему.
псевдоним .. = "CD .."
псевдоним ..2 = "CD ../..»
псевдоним ..3 = "CD ../../..»
(так далее)
Смотрите Hack # 2
Простая функция с псевдонимом тоже:
function cd_up() {
cd $(printf "%0.s../" $(seq 1 $1 ));
}
alias 'cd..'='cd_up'
(Вы можете определить это в ~/.bashrc
если хотите в каждом случае).
Это просто в использовании:
$ cd.. 10
Простое, низкотехнологичное решение, которое не требует настройки. Работает только в оболочках с редактированием команды bash
-style.
- Тип
cd ..
- Нажмите стрелку вверх Возврат столько раз, сколько необходимо. Очень быстро, если вы используете два пальца.
Оказывается, правильный ответ - «cd +n», где n - количество уровней, которые вы хотите пройти. Жаль, что это нигде не задокументировано!
Вы можете написать функцию (это должна быть функция, так как вы хотите изменить состояние самой оболочки, а именно рабочего каталога; внешняя команда будет влиять только на собственный процесс).
Вот функция, которая поднимется на несколько уровней, переданных в качестве аргумента (по умолчанию 1) в физической структуре каталогов (например, cd -P ..
, n раз):
up() {
# default parameter to 1 if non provided
declare -i d=${@:-1}
# ensure given parameter is non-negative. Print error and return if it is
(( $d < 0 )) && (>&2 echo "up: Error: negative value provided") && return 1;
# remove last d directories from pwd, append "/" in case result is empty
cd "$(pwd | sed -E 's;(/[^/]*){0,'$d'}$;;')/";
}
Используйте это так:
up 4
Не совсем то, что вы просите, но вы должны изучить pushd
и popd
. Я считаю их гораздо более полезными для навигации по папкам, чем некоторые псевдонимы cd...
Если вы идете туда-сюда из пары фиксированных областей, обычно нужно иметь псевдонимы.
alias proj1='cd /some/dir/containing/proj1'
alias proj2='cd /some/deeper/dir/structure/containing/proj2'
Вместо использования псевдонимов вы также можете использовать следующую функцию bash:
function mcd() {
up=""
for ((i=1; i<=$1;i++)); do
up="${up}../"
done
cd $up
}
(или в виде одной строки: function mcd() { up=""; for ((i=1; i<=$1;i++)); do up="${up}../"; done; cd $up; }
)
Добавление этого в ваш файл ~/.bashrc
сделает его доступным в вашем терминале и сборке строки ../../../../../../
перед вызовом cd
также позволит использовать cd -
для возврата в начальный каталог.
Более полезная реализация может также содержать некоторые проверки пользовательского ввода:
function mcd() {
if [[ $1 -lt 1 ]]; then
echo "Only positive integer values larger than 1 are allowed!" >&2
echo -e "\n\tUsage:\n\t======\n\n\t\t# to go up 10 levels in your directory\n\t\tmcd 10\n\n\t\t# to go up just 2 levels\n\t\tmcd 2\n" >&2
return 1;
fi
up=""
for ((i=1; i<=$1;i++)); do
up="${up}../"
done
cd $up
}
Посмотрите на DirB. Это скрипт BASH, который позволяет создавать закладки следующим образом:
ОПЕРАЦИИ
- s Сохраните закладку каталога
- г перейти к закладке или названному каталогу
- p поместить закладку / каталог в стек dir
- r удалить сохраненную закладку
- d отображать путь к каталогу с закладкой
- sl распечатать список закладок каталога
Очень просто, очень эффективно.
Попробуйте использовать редко используемый параметр среды CDPATH
. Тогда вам, возможно, не придется явно устанавливать уровень.
Пример:
$ find workspace -type d
workspace
workspace/project1
workspace/project1/com
workspace/project1/com/java
workspace/project1/com/java/lang
$ CDPATH=".:~/workspace:~/workspace/project1:~/workspace/project1/com:~/workspace/project1/com/java:~/workspace/project1/com/java/lang"
$ cd com
$ pwd
~/workspace/project1/com
Если вы работаете с несколькими проектами, вы можете включить настройку CDPATH в файл среды проекта. И запустить его с прокладкой для дополнительной автоматизации.
Я склонен использовать pushd и popd довольно часто. Я склонен использовать CDPATH, чтобы позволить мне переключаться между деревьями проекта, а не подкаталогами в проекте - но в данный момент я работаю над множеством небольших проектов, а не над несколькими большими проектами. :)
Надоела эта точно такая же проблема, и в итоге она написала CD-Plus . Утилита CLI с одним файлом, которая позволяет вам создавать несколько каталогов.
использование
echo `pwd` # /foo/bar/foobar/baz/foobaz/bazfoo
d baz
echo `pwd` # /foo/bar/
Отойдите от ответа @ Grigory:
function cd_up() {
if [ -z "$1" ]; then
cd ..
else
cd $(printf "%0.s../" $(seq 1 $1 ))
fi
}
alias 'cdd'='cd_up'
То есть :
// go up 1 directory level
$cdd
// go up 3 directory level
$cdd 3
Если вы ранее находитесь в целевом каталоге:
luna:/tmp % mkdir -p a/b/c/d
luna:/tmp % pwd
/tmp
luna:/tmp % cd a/b/c/d
luna:d % pwd
/tmp/a/b/c/d
luna:d % cd -
luna:/tmp % pwd
/tmp
luna:/tmp %
Вы знаете об автопрыжке? Это сторонний хак, но может быть полезен в вашем сценарии.