Как перейти на вновь созданный каталог?

582
nnbvcn
cd "$(mkdir -v "$(date -R)"|sed s+.`(.*)'.*)" 

Это предназначено для создания каталога с именем $(date -R). Я мог бы просто cd $(date -R), но виновником является то, что дата может измениться с момента запуска предыдущей команды ( mkdir).

Поэтому я хочу проанализировать его вывод, чтобы определить имя созданного каталога. Как мне исправить код? В настоящее время отображается >подсказка, указывающая, что цитата отсутствует.

Изменение 'на \'не меняет результат. Если у вас есть лучший способ сделать это, скажите, пожалуйста.

2
Я объединил для вас ваши незарегистрированные учетные записи и принудительно преобразовал ваши ответы в комментарии. Теперь вы сможете принимать и комментировать этот ответ - пока вы снова не потеряете свои куки. Таким образом, вы можете рассмотреть возможность регистрации, в противном случае имейте в виду, что вы можете [восстановить] (http://superuser.com/users/account-recovery) незарегистрированную учетную запись в качестве журнала, поскольку вы указали действительный адрес электронной почты. DMA57361 12 лет назад 2

4 ответа на вопрос

12
Zoredache

ИМХО ты делаешь что-то простое без необходимости сложное. Почему бы просто не сделать что-то простое, как.

NEWDIR=$(date -R);mkdir "$NEWDIR";cd "$NEWDIR" 
Ваше решение прекрасно работает, и я принимаю ваш ответ. Тем не менее, мне все еще интересно, как исправить мой код из любопытства. nnbvcn 12 лет назад 0
Мой 2c: `(NEWDIR = $ (date -R); mkdir" $ NEWDIR "&& cd" $ NEWDIR ")` Это не загромождает окружающую среду .. estani 9 лет назад 0
4
glenn jackman

С bash вы также можете использовать расширение истории :

mkdir "$(date -R)" && cd !#:^ 
2
jw013

sedЧасть в вашей команде достаточно сломана. Попробуй это:

sed -e "s/.*\`\(.*\)'.*/\1/" 

Если вы часто хотите mkdirи cdза один шаг, попробуйте эту (только для bash) функцию:

mdc () { mkdir "$@" && cd "${!#}"; } 

Это просто оборачивается mkdir. Используйте его как mdc [mkdir options] newdirи убедитесь, что newdirидет в последнюю очередь.

I forgot about the second part; it should be: cd $(mkdir -v "$(date -R)"|sed -r s+.*`(.*)'.*+\1+)" I tried your variant, but it produces the same result when I put it in: cd "$(mkdir -v $(date -R)| sed -e s/.*\`\(.*\)'.*/\1/)" Your mdc () works great. I would comment, but since I didn't sign up, I can only answer after losing cookies. (If you can, please change this into a comment to the answer). nnbvcn 12 лет назад 0
You left out the all important quotes around the regex when you put it in. Put the double quotes back in like they are in mine and see if it works that way. jw013 12 лет назад 0
После того, как я вернул цитаты обратно, все заработало. Я взял их в первую очередь, потому что gedit показывал неправильную подсветку. Благодарю. nnbvcn 12 лет назад 0
1
Rich Homolka

Побочный эффект: вам не нужно использовать sedдля вывода date, потому что dateсам по себе имеет несколько хороших инструментов для форматирования. Если вы передаете date строку, начинающуюся с '+', вы можете использовать коды форматирования из strftime .

$ date '+%Y-%m-%d_%H-%M-%S' 

Я лично использовал бы что-то сортируемое для имени каталога, что означает, что я никогда не буду использовать «Пт» в качестве начальной части имени.