В настоящее время каталог, автоматически создаваемый для программы, с которой я работаю, включает двоеточия (:
), создание проблем, когда я пробую, управляет каталогом. Мог любой помогать мне сначала удалить это двоеточие и затем смочь к cd
в переименованный каталог? (Таким образом, я предполагаю, что должен был бы равняться новому имени каталога переменной?)
Пример:
Lang-32b-Branch:Line
Lang-32b-BranchLine
Для достижения этого вручную простым способом, Вы могли использовать mv
команда с некоторым сильным заключением в кавычки, чтобы гарантировать, что оболочка не интерпретирует двоеточие как специальный символ:
mv 'Lang-32b-Branch:Line' 'Lang-32b-BranchLine' && cd 'Lang-32b-BranchLine'
Альтернативный подход должен использовать переменную и ту из функций расширения параметра Bash, которое может быть более полезным, если Вы хотите автоматизировать это изменение имени каталога в сценарий:
dir=Lang-32b-Branch:Line
mv "$dir" "${dir//:/}"
Расширение "${dir//:/}"
заменит любое возникновение символа двоеточия ни с чем, давая ожидаемый результат Lang-32b-BranchLine. Используя "${dir/:/}"
привел бы только к первому вхождению удаляемого двоеточия, хотя это будет все еще работать на Ваш данный пример.
Как острота для перемещения и CD в каталог:
dir=Lang-32b-Branch:Line ; mv "$dir" "${dir//:/}" && cd "${dir//:/}"
Или если Вы хотели получить измененное имя каталога в переменную, названную new_dir:
dir=Lang-32b-Branch:Line ; new_dir="${dir//:/}"; mv "$dir" "$new_dir" && cd "$new_dir"
Замечательный гид по расширению параметра Bash доступен здесь.
Если Вы хотите, чтобы общекомандное переименовало несколько файлов и/или каталогов с одним или несколькими двоеточиями, можно использовать rename
,
rename 's/://g' *
После этого Вы можете cd
в любой из каталогов (что Вы изменили), как обычно (без любых кавычек).
Альтернативная командная строка согласно подсказкам в комментариях @DavidFoerster и @dessert,
rename 's/://g' *\:*/
Править:
@EliahKagan предлагает запуститься с 'пробного прогона' с опцией-n,
rename -n 's/://g' *
который просто распечатывает, какое переименование операций было бы выполнено. Затем это может быть выполнено снова с-n опцией, удаленной для фактического переименования файлов. Это помогает избежать, чтобы ошибки, такие как случайное переименование набора файлов один на самом деле хотели оставить в покое.
Если это - только один каталог, можно использовать mv
и cd
. Использовать питание bash
Расширение истории и специальный параметр $_
:
mv Lang-32b-Branch:Line !#:$:s/:/ && cd $_
!#:$:s/:/
заменяется последним словом ($
) из текущей командной строки (!#
), где первое :
s
замененный ничем. Если Вы хотите, чтобы каждое двоеточие было удалено, изменило его на !#:$:gs/:/
(g
lobally). $_
просто заменяется последним аргументом последней команды.