Еще более простой подход: Откройте Filezilla (или Ваш любимый браузер ftp), откройте соединение SSH для того же сайта, найдите файл и перетащите его через к Вашей локальной файловой структуре. Если Вы плохо знакомы с Filezilla, используйте функцию "начальника отдела" для повторного подключения быстро в следующий раз.
Да, я знаю, что это очевидно для большинства из Вас (и не точно на точке), но некоторые (как я), кто нашел, что этот поток, ищущий решение только для терминала, возможно, пропустил очевидное.
Нет никакой встроенной команды, но можно легко записать функцию, которая звонит mkdir
затем cd
:
mkcd () {
mkdir "$1"
cd "$1"
}
Вставьте этот код Ваш ~/.bashrc
файл (или ~/.kshrc
для ksh пользователей, или ~/.zshrc
для zsh пользователей). Это определяет вызванную функцию mkcd
. "$1"
будет заменен аргументом функции, когда Вы выполните его.
Эта простая версия имеет несколько дефектов:
-p
опция к mkdir
. (Это может или не может быть желательно, поскольку это увеличивает риск опечатки, идущей необнаруженный, например. mkcd mydierctory/newsub
счастливо создаст mydierctory
и mydierctory/newsub
когда Вы означали создавать newsub
в существующем mydirectory
.)-
но не просто -
, затем mkdir
и cd
интерпретирует его как опцию. Если это справедливо -
, затем cd
интерпретирует его для значения $OLDPWD
. Если это +
сопровождаемый 0 или больше цифрами, затем cd
в zsh интерпретирует его как индекс в стопке каталога. Можно решить первую проблему, но не другие два, путем передачи --
перед аргументом. Можно решить все эти проблемы путем предварительного ожидания ./
к аргументу, если это - относительный путь.mkdir
не следует CDPATH
, но cd
делает, поэтому если Вы установили CDPATH
к значению, которое не начинается .
(по общему признанию несколько необычная конфигурация), затем cd
может принести Вам к другому каталогу, чем тот, который был просто создан. Предварительное ожидание ./
к относительным путям фиксирует это (это вызывает CDPATH
быть проигнорированным).mkdir
сбои, это пытается выполниться cd
. Зафиксируйте: использовать &&
разделить две команды.Все еще довольно простой:
mkcd () {
case "$1" in /*) :;; *) set -- "./$1";; esac
mkdir -p "$1" && cd "$1"
}
Эта версия все еще имеет потенциал для создания cd
войдите в другой каталог от того это mkdir
просто созданный в одном пограничном случае: если аргумент mkcd
содержит ..
и проходит символьную ссылку. Например, если текущий каталог /tmp/here
и mylink
символьная ссылка на /somewhere/else
, затем mkdir mylink/../foo
создает /somewhere/else/foo
тогда как cd mylink/../foo
изменения в foo
. Недостаточно искать символьные ссылки в аргументе, потому что оболочка также отслеживает символьные ссылки в своем собственном текущем каталоге, таким образом, cd /tmp/mylink; mkdir ../foo; cd ../foo
не изменяется в новый каталог (/somewhere/else/foo
) но в /tmp/foo
. Фиксация для этого должна позволить cd
встроенная твердость все ..
компоненты контура сначала (не имеет смысла использовать foo/..
если foo
не существует, таким образом, mkdir
никогда потребности не видеть никого ..
).
Мы приезжаем в это устойчивое если немного окровавленная версия:
mkcd () {
case "$1" in
*/..|*/../) cd -- "$1";; # that doesn't make any sense unless the directory already exists
/*/../*) (cd "${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd -- "$1";;
/*) mkdir -p "$1" && cd "$1";;
*/../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "./$1";;
../*) (cd .. && mkdir -p "${1#.}") && cd "$1";;
*) mkdir -p "./$1" && cd "./$1";;
esac
}
(Осуществление: почему я использую подоболочку для первого cd
звонить?)
Если mkdir перестал работать, я хочу убедиться не изменить текущий каталог. Возврат с CD - или $OLDPWD не достаточно хорош, если оболочка не имеет разрешения измениться в его текущий каталог. Кроме того, вызов CD обновляет OLDPWD, таким образом, мы только хотим сделать это однажды (или восстановить OLDPWD).
Существуют также менее специализированные способы не должным быть перепечатать слово от предыдущей строки:
cd
, затем Esc. (или Высокий звук +.) для вставки последнего аргумента от предыдущей команды.cd !$
выполняется cd
на последнем аргументе предыдущей команды.mkdir
в cd
.Это никогда не происходило бы со мной к сценарию это поведение, потому что я ввожу следование почти почасового основания...
$ mkdir someDirectory<ENTER>
$ cd !$
где удар любезно занимает место !$
с последним словом последней строки; т.е. долгое имя каталога, которое Вы ввели.
Кроме того, завершение имени файла является Вашим другом в таких ситуациях. Если бы Ваш новый каталог был единственным файлом в папке, то быстрая двойная ВКЛАДКА дала бы Вам новый каталог, не повторно вводя его.
Хотя здорово, что удар позволяет Вам сценарию такие общие задачи, как другие ответы предлагают, чтобы я думал, что лучше изучить особенности редактирования командной строки, которые должен предложить удар так, чтобы, когда Вы работаете над другой машиной, Вы не пропускали синтаксический сахар, который обеспечивают Ваши пользовательские сценарии.
Согласно Каким настройкам Вы сделали на своем профиле оболочки для повышения производительности?, это - то, как я делаю это:
# make a directory and cd to it
mcd()
{
test -d "$1" || mkdir "$1" && cd "$1"
}
это означает, что это также работает, если каталог уже существует.
mcd
команда? Какой пакет или проект обеспечивают эту команду?
– Mikel
14.04.2011, 01:05
Или Вы могли просто создать короткую переменную на лету и использовать ее дважды x = longproject ; mkdir $x ; cd $x
- то, которое я допускаю, еще длиннее, чем использование функции сценария оболочки :)
Это то, что вам нужно. Никакой другой конфигурации не требуется:
mkdir longtitleproject && cd $_
Переменная $ _
в bash является последним аргументом, переданным предыдущей команде. В данном случае это имя только что созданного каталога. Как объясняется в man bash
:
_ At shell startup, set to the absolute pathname used to invoke
the shell or shell script being executed as passed in the envi‐
ronment or argument list. Subsequently, expands to the last
argument to the previous command, after expansion. Also set to
the full pathname used to invoke each command executed and
placed in the environment exported to that command. When check‐
ing mail, this parameter holds the name of the mail file cur‐
rently being checked."$_" is the last argument of the previous command.
Используйте cd $ _
, чтобы получить последний аргумент предыдущей команды вместо cd! $
, потому что cd ! $
дает последний аргумент предыдущей команды в истории оболочки :
cd ~/
mkdir folder && cd !$
вы попадаете домой (или ~ /)
cd ~/
mkdir newfolder && cd $_
вы попадаете в новую папку под домом !! (или ~ / newfolder)
Если вы используете Oh My Zsh, есть команда под названием take , которая делает именно это. Это выглядело бы примерно так.
take myfolder
Я нашел это случайно. Я только что посмотрел, и он указан в этом читшите из вики Oh My Zsh на GitHub. Это довольно полезная команда, которую, по-видимому, очень легко создать самостоятельно.
Я сделал скрипт, который создает каталог, а затем cd'шник, затем я дал ему псевдоним. И вот gist, где я описываю это.
https://gist.github.com/rehnen/34236d6ff270ccaa74b6#mkdir-like-it-was-meant-to-be
Вот небольшой вариант, достойный упоминания:
function mkdir() {
local dir=$1
command mkdir "$dir" && cd "$dir"
}
Добавьте это в свой ~/.bash_profile
, и вы сможете использовать mkdir
как обычно (после того, как source
'сделал это), за исключением того, что теперь будет выполняться указанная выше функция, а не стандартная команда mkdir
.
Обратите внимание, что это не подтверждает ввод в соответствии с принятым ответом Жиля, но демонстрирует, как вы можете (эффективно) переопределить встроенные функции.
Из документации(слегка перефразируя):
команда mkdir [args]
запускаетmkdir
саргументами
, игнорируя любую функцию оболочки с именемmkdir
. Выполняются только встроенные команды оболочки или команды, найденные при поиске в PATH. Если есть функция оболочки с именемls
, запусккоманды ls
внутри функции выполнит внешнюю командуls
вместо рекурсивного вызова функции
. встроенный
дает тот же результат, что и command
.
Создайте команду mkcd
для вашей среды в одну строку
echo -e 'mkcd() {\n mkdir -p "$1" && cd $_\n}' >> ~/.${0//-/}rc &&. ~/.${0//-/}rc
Это просто сделать в скрипте/функции bash. Я создал очень удобочитаемое и достаточно документированное руководство, включающее сценарии, которые работают как в Linux, так и в MacOS (, оно также будет поддерживаться в будущем ).
Моя цель по сложности туториала :написана для целевой аудитории, единственным условием является то, что у пользователя есть пульс и он может читать по-английски, поэтому, пожалуйста, оставьте отзыв, если вам нужна помощь.
https://github.com/craigopie/shellscripts
mcdir() {
if [ $# -eq 0 ] || [ $1 = "-h" ] || [ $1 = "--help" ]
then
echo "Usage: [option...] {directory}"
echo " -p, --path Create all directories in path "
echo " -h, --help Shows this helpful information "
echo
return 0
fi
## create directory with a path
if [ $1 = "-p" ] || [ $1 = "--path" ]
then
mkdir -p "$2" &>/dev/null
if [ $? -gt 0 ]
then
echo "There was a problem creating your directory."
return 1
fi
cd "$2" &>/dev/null
if [ $? -gt 0 ]
then
echo "Unable to change into that directory."
return 1
fi
return 0
fi
## create directory in this location
mkdir "$1" &>/dev/null
if [ $? -gt 0 ]
then
echo "There was a problem creating your directory."
return 1
fi
cd "$1" &>/dev/null
if [ $? -gt 0 ]
then
echo "Unable to change into that directory."
return 1
fi
return 0
}
export -f mcdir
Чтобы установить это, у вас есть два варианта:
.bashrc
файл. .bash_profile
. Опять же, в файле README очень подробно описано, как это сделать.
Удачи!
ksh
, и также работы вzsh
) последовательность для "повторения длится слово предыдущей команды". Я использую его довольно часто. – geekosaur 12.03.2011, 03:46/a/b/..//
на самом деле работал бы, но нет/a/b/../c
. Фиксированный. Я поставил вопрос более широкой аудитории. – Gilles 'SO- stop being evil' 31.01.2013, 00:26mkcd() { mkdir -p "$1" && cd "$1"; }
кажется, не проблема в (мой экземпляр) zsh.mkdir -p /var/tmp/somewhere/else /tmp/here; cd /tmp/here; ln -s /var/tmp/somewhere/else mylink; mkdir -p mylink/../foo && cd mylink/../foo; pwd
(включает установку и), дисплеи/tmp/here/foo
который является тем, что было создано (и что я ожидал).bash
ошибочно создает и изменяется на/var/tmp/somewhere/foo
. – Adam Katz 15.01.2015, 20:39