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

У меня такая же проблема, но я установил через webupd8 - установил Oracle Java (JDK) 7 в Ubuntu через репозиторий PPA, искал в Интернете. Я нашел этот скрипт (я адаптировал сценарий к своей системе), но в основном это:

#!/bin/bash
export LD_LIBRARY_PATH="/opt/java/jre/lib/amd64"
java minecraft.jar

Скрипт для моей системы:

#!/bin/bash
export LD_LIBRARY_PATH="/usr/lib/jvm/java-7-oracle/jre/lib/amd64"
java -jar Minecraft.jar

Надеюсь, это будет полезно

7
задан 1 March 2018 в 05:51

9 ответов

Чтобы добиться этого вручную, простым способом вы могли бы использовать команду mv с некоторым сильным цитированием, чтобы убедиться, что оболочка не интерпретирует двоеточие как специальный символ:

mv 'Lang-32b-Branch:Line' 'Lang-32b-BranchLine' && cd 'Lang-32b-BranchLine'
[d1 ] Альтернативный подход заключается в использовании переменной и одной из возможностей расширения параметра Bash, что может быть более полезным, если вы хотите автоматизировать это изменение имени каталога в скрипт:

dir=Lang-32b-Branch:Line
mv "$dir" "${dir//:/}"

Расширение из "${dir//:/}" заменит любое появление символа двоеточия ничем, давая ожидаемый результат Lang-32b-BranchLine. Использование "${dir/:/}" приведет к удалению только первого вхождения двоеточия, хотя это все равно будет работать для вашего данного примера.

Как однострочный движок для перемещения и cd в каталог: [!d3 ]

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.

11
ответ дан 22 May 2018 в 12:50
  • 1
    Отлично! Спасибо за ссылку, это, безусловно, помогает мне обернуть мою голову вокруг этого – Biscuit 28 February 2018 в 19:19
  • 2
    $_ всегда содержит последний аргумент последней вызванной команды (см. мой ответ ниже) - это может сэкономить много набрав! Ярлык для ввода его на лету - Alt+.. ${dir//:/} можно дополнительно сократить до ${dir//:}. – dessert 28 February 2018 в 19:28
  • 3
    Я думал, что смогу покончить с последним / в расширении, но не был на 100% уверен, что @dessert. Я часто использую Alt+. в cli, но никогда не использую $_. Спасибо за дополнительные советы! – Arronical 28 February 2018 в 20:05
  • 4
    Какая оболочка интерпретирует : как особый символ (вне расширения истории и как оператор, что здесь не имеет значения)? – Konrad Rudolph 28 February 2018 в 20:53
  • 5
    @KonradRudolph Возможно, это может быть проблема с: в имени каталога из-за $PATH ... (Я не говорю, что в случае с OP это актуально, так как это говорит о возможности - тот, который сразу перешел мне в голову, но не тот, о котором я даже подумал.) – Pryftan 1 March 2018 в 00:22

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

11
ответ дан 17 July 2018 в 19:48

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

11
ответ дан 23 July 2018 в 20:33

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

rename 's/://g' *

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

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

[ f2] Если вы хотите ограничить действия переименования каталогами, вы должны добавить косую черту после звезды дикой карты. Вы также можете поместить двоеточие в выражении wild-card, чтобы ограничить выбор файлов теми, которые содержат двоеточие в имени файла, что может ускорить действие, если нужно искать огромное количество каталогов,

Редактировать:

@ EliahKagan предлагает начать с «сухого хода» с опцией -n,

rename -n 's/://g' *
, которая просто печатает, какие операции переименования будут выполнено. Затем его можно запустить снова с удаленной опцией -n, чтобы фактически переименовать файлы. Это помогает избежать ошибок, таких как случайное переименование нескольких файлов, которые действительно хотели оставить в покое.
8
ответ дан 22 May 2018 в 12:50
  • 1
    При использовании rename я сначала рекомендую запустить его с -n (например: rename -n 's/://g' *), который просто распечатывает, какие операции переименования будут выполняться. Затем его можно запустить снова с удаленной опцией -n, чтобы фактически переименовать файлы. Это помогает избежать ошибок, таких как случайное переименование нескольких файлов, которые действительно хотели оставить в покое. – Eliah Kagan 1 March 2018 в 03:21

Если это только один каталог, вы можете использовать mv и cd. Для использования мощности bash Expansion истории и специального параметра $_:

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

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

4
ответ дан 22 May 2018 в 12:50

Если это только один каталог, вы можете использовать mv и cd. Для использования мощности bash Expansion истории и специального параметра $_:

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

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

4
ответ дан 17 July 2018 в 19:48

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

rename 's/://g' *

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

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

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

Редактировать:

@ EliahKagan предлагает начать с «сухого хода» с опцией -n,

rename -n 's/://g' * , которая просто печатает, какие операции переименования будут выполнено. Затем его можно запустить снова с удаленной опцией -n, чтобы фактически переименовать файлы. Это помогает избежать ошибок, таких как случайное переименование нескольких файлов, которые действительно хотели оставить в покое.
8
ответ дан 17 July 2018 в 19:48

Если это только один каталог, вы можете использовать mv и cd. Для использования мощности bash Expansion истории и специального параметра $_:

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

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

4
ответ дан 23 July 2018 в 20:33

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

rename 's/://g' *

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

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

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

Редактировать:

@ EliahKagan предлагает начать с «сухого хода» с опцией -n,

rename -n 's/://g' * , которая просто печатает, какие операции переименования будут выполнено. Затем его можно запустить снова с удаленной опцией -n, чтобы фактически переименовать файлы. Это помогает избежать ошибок, таких как случайное переименование нескольких файлов, которые действительно хотели оставить в покое.
8
ответ дан 23 July 2018 в 20:33
  • 1
    При использовании rename я сначала рекомендую запустить его с -n (например: rename -n 's/://g' *), который просто распечатывает, какие операции переименования будут выполняться. Затем его можно запустить снова с удаленной опцией -n, чтобы фактически переименовать файлы. Это помогает избежать ошибок, таких как случайное переименование нескольких файлов, которые действительно хотели оставить в покое. – Eliah Kagan 1 March 2018 в 03:21

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

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