Можно изменить синтаксические свойства символов с помощью modify-syntax-entry
функция (C-h f
modify-syntax-entry
в emacs для большего количества информации):
Например, если Вы пишете .tex документы, Вы могли бы добавить следующее к Вашему .emacs
:
(add-hook
'TeX-mode-hook
'(lambda ()
(modify-syntax-entry ?_ "w")
(modify-syntax-entry ?- "w")
))
Это говорит emacs рассматривать _
и -
поскольку символы "слова", когда Вы находитесь в режиме TeX, таким образом передавать-слово и обратное слово, сделают то, что Вы хотите.
Оболочка интерпретирует командную строку с определенными правилами, которые необходимо рассмотреть здесь:
Можно выйти из метасимволов оболочки с \так, чтобы это вело себя как обычный символ.
Можно использовать одинарные или двойные кавычки и в них большинство (с двойными кавычками) или все (с одинарными кавычками), метасимволы оболочки теряют свое особое значение.
Кавычки не должны быть на границах слова, так, чтобы rm th"is fil"e
совпал бы с rm "this file"
.
Символы []? * может использоваться для расширения имени файла. Им нельзя заключить в кавычки или оставить с этой целью.
Таким образом, возможные решения для Вашего случая rm -rf '('*
, rm -rf "("*
и rm -rf \(*
. Я не знаю, почему последний не работал в Вашем случае. Возможно, существует некоторый пробел перед круглой скобкой?
Со следующей строкой необходимо смочь видеть, существуют ли какие-либо забавные символы в именах файлов:
for i in *; do od -c <<< "$i"; done
Если Вы помещаете *
внутри "
или '
это не расширится (это - литерал *
только).
Но можно поместить *
за пределами "
:
rm "("*
Однако это идентично rm \(*
который Вы уже отправили. Таким образом, если это не работает, ни один Ваш, файлы не начинаются с ASCII (
символ, в конце концов (существуют символы Unicode, которые выглядят очень похожими), или Вы пробуете это в неправильном месте.
a
, b
, ,
, .
, (
и т.д. используются. Существуют однако глифы тот подобный взгляд. Например, это: ⦅
оставленная белая круглая скобка трех байтов.
– Runium
30.10.2013, 19:51
Две вещи можно попробовать:
1) rm -f \\(*
(Вам не нужно -r
если Вы не хотите рекурсивно удалить каталоги. Так как Вы сказали "файлы", я оставил его. rm -rf
опасный инструмент и не должен использоваться, если он не необходим.)
2) комната-i *
Этот метод требует небольшого количества ручного вмешательства, но так как неалфавитно-цифровые символы имеют тенденцию сортировать сначала, вещи, которые Вы хотите удалить, имеют тенденцию подходить сначала, и Вы можете проблема a ^C
когда Вы получили их.
Как примечание, при экспериментировании с нечетными подстановочными знаками, попытка использовать echo
вместо rm
сначала. Особенно при использовании rm -rf
. Тем путем Вы видите то, что оболочка думает, что расширяется до (если что-либо) прежде, чем удалить вещи. Тем более, что иногда этот тип файла создается кем-то надеющимся you'l, делают что-то глупое и сдувают больше файлов, чем, что Вы намереваетесь.
Поскольку другие упомянули 3-й пример, который Вы включали, должен был работать. Как альтернатива Вы могли использовать find
удалить эти файлы также.
Принятие следующих демонстрационных данных.
$ touch "(afile)"{1..5}
$ ls -l
total 0
-rw-rw-r-- 1 saml saml 0 Oct 30 13:47 (afile)1
-rw-rw-r-- 1 saml saml 0 Oct 30 13:47 (afile)2
-rw-rw-r-- 1 saml saml 0 Oct 30 13:47 (afile)3
-rw-rw-r-- 1 saml saml 0 Oct 30 13:47 (afile)4
-rw-rw-r-- 1 saml saml 0 Oct 30 13:47 (afile)5
Теперь удалите использование файлов find
(принятие Вас имеет версию GNU find
):
$ find . -name "(*" -delete
$ ls -l
total 0
$
В ситуации, где я только должен очистить такие файлы как, я просто перечислил бы их в файл:
$ ls -1 > delete-list
Затем, вручную редактирование delete-list
таким образом, это только содержит названия файлов, которые я хочу удалить. Наконец:
$ xargs --delim=\\n rm < delete-list
Если имена хорошего поведения относительно пробела, то можно отбросить параноика --delim
опция.
./
помогает в случае продвижения-
в имени файла, так, чтобы это не было интерпретировано как опция. – Michael Suelmann 30.10.2013, 19:59