Удаление всех файлов, начинающихся со скобок

У меня много файлов в каталоге, который начинается с круглых скобок. Они генерируются Dropbox из-за конфликта. Любая комбинация экранирования, похоже, не помогает:

rm -rf "(*" rm -rf "\(*" rm -rf \(* 

Как упоминалось в frostschutz, они, похоже, не являются символами ASCII. Как я могу узнать, так ли это, и какова работа?

5 Solutions collect form web for “Удаление всех файлов, начинающихся со скобок”

Оболочка интерпретирует командную строку с определенными правилами, которые вы должны учитывать здесь:

  • Вы можете избежать метасимволов оболочки с \, чтобы он вел себя как обычный персонаж.

  • Вы можете использовать одиночные или двойные кавычки и внутри этих наиболее (с двойными кавычками) или все (с одинарными кавычками) метасимволы оболочки теряют свое особое значение.

  • Котировки не должны быть на границах слов, так что 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, которые выглядят очень похожими), либо вы пытаясь сделать это в неправильном месте.

Две вещи, которые вы можете попробовать:

1) rm -f \\(*

(Вам не нужно -r если вы не хотите рекурсивно удалять каталоги. Поскольку вы сказали «файлы», я оставил его. rm -rf – опасный инструмент и не должен использоваться, если он не нужен.)

2) rm -i *

Этот метод требует немного ручного вмешательства, но поскольку не буквенно-цифровые символы имеют тенденцию сортировать в первую очередь, вещи, которые вы хотите удалить, имеют тенденцию выходить первым, и вы можете выпустить a ^C когда вы их получили.

В качестве примечания, при экспериментировании с нечетными подстановочными знаками, сначала попробуйте использовать echo вместо rm . Особенно, если использовать rm -rf . Таким образом, вы можете увидеть, что оболочка думает, что она расширяется (если есть) до удаления вещей. Тем более, что иногда этот тип файла создается кем-то, надеющимся, что вы сделаете что-то глупое и убьете больше файлов, чем то, что вы намереваетесь.

Как уже упоминалось, третий пример, который вы включили, должен был сработать. В качестве альтернативы вы можете использовать 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 (если у вас есть версия find GNU):

 $ find . -name "(*" -delete $ ls -l total 0 $ 

В ситуации, когда мне нужно только один раз очистить файлы, я просто перечислил их в файл:

 $ ls -1 > delete-list 

Затем вручную отредактируйте delete-list чтобы он содержал только имена файлов, которые я хочу удалить. В заключение:

 $ xargs --delim=\\n rm < delete-list 

Если имена правильны в отношении пробелов, вы можете отказаться от параноидального параметра --delim .

  • Как искать одиночные кавычки и двойные кавычки в поиске grep?
  • Гармонический текст в меню tmux
  • Почему sed во всем мире заменяет только первое появление в нескольких случаях?
  • Скопируйте скобки в PS1
  • Как подменить «в awk?
  • Как использовать grep, сохраняя исходный цвет текста?
  • Можно ли использовать коды escape-кода ANSI в Bash здесь-документах?
  • Шаблон соответствия \\\ ", используя grep
  • Независимость от оболочки для строк в скриптах
  • Как использовать сеанс ssh без форматирования цвета
  • Как избежать атак с помощью последовательной атаки в терминалах?
  • Linux и Unix - лучшая ОС в мире.