Удаление двоеточий в имени каталога

В настоящее время каталог, автоматически создаваемый для программы, с которой я работаю, включает двоеточия (:), создание проблем, когда я пробую, управляет каталогом. Мог любой помогать мне сначала удалить это двоеточие и затем смочь к cd в переименованный каталог? (Таким образом, я предполагаю, что должен был бы равняться новому имени каталога переменной?)

Пример:

  • имя текущего каталога: Lang-32b-Branch:Line
  • желаемое имя каталога: Lang-32b-BranchLine
7
задан 28 February 2018 в 18:51

3 ответа

Для достижения этого вручную простым способом, Вы могли использовать 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 доступен здесь.

12
ответ дан 23 November 2019 в 06:09

Если Вы хотите, чтобы общекомандное переименовало несколько файлов и/или каталогов с одним или несколькими двоеточиями, можно использовать rename,

rename 's/://g' *

После этого Вы можете cd в любой из каталогов (что Вы изменили), как обычно (без любых кавычек).


Альтернативная командная строка согласно подсказкам в комментариях @DavidFoerster и @dessert,

rename 's/://g' *\:*/
  • Если Вы хотите ограничить переименовать действия каталогами, необходимо добавить наклонную черту после подстановочной звезды.
  • Можно также поместить двоеточие в выражение с подстановочными знаками для ограничения выбора файлов тем, которые содержат двоеточие в имени файла, которое могло бы сделать действие быстрее, если огромная сумма каталогов должна искаться,

Править:

@EliahKagan предлагает запуститься с 'пробного прогона' с опцией-n,

rename -n 's/://g' *

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

8
ответ дан 23 November 2019 в 06:09

Если это - только один каталог, можно использовать mv и cd. Использовать питание bash Расширение истории и специальный параметр $_:

mv Lang-32b-Branch:Line !#:$:s/:/ && cd $_

!#:$:s/:/ заменяется последним словом ($) из текущей командной строки (!#), где первое : sзамененный ничем. Если Вы хотите, чтобы каждое двоеточие было удалено, изменило его на !#:$:gs/:/ (globally). $_ просто заменяется последним аргументом последней команды.

4
ответ дан 23 November 2019 в 06:09

Другие вопросы по тегам:

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