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

У меня много файлов в каталоге, который начинается с круглых скобок. Они генерируются 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 .

  • bashrc PS1: пользовательская подсказка не очистит весь текст
  • Подстановки команд vs обратные сбрасывания экранов в цитируемой строке
  • существует ли служба pastebin, которая поддерживает терминальные escape-последовательности?
  • Использовать звездочку в переменных
  • Можно ли использовать коды escape-кода ANSI в Bash здесь-документах?
  • Обработка исключений sed с экранированными символами
  • Смутно, когда нужно избегать метасимволов в дорожках
  • Вывод ANSI в приглашении Pash отображается как мусор в терминале Gnome
  • Как кнопка tp Print / echo в unix-bash, версия 3.2.52
  • Почему «shift-tab» приводит к «Escape» в терминале?
  • Как использовать меньше в скрипте без получения ESC escape-символов?
  • Interesting Posts

    Как добавить длительность времени, выраженную в days-hh: min: ss.nnn format?

    Разрешить всем пользователям писать файлы / папки пользователя «apache»?

    Увеличение / размер корня

    Что такое виртуальный мост с -nic в конце имени

    Группы Winbind PAM.D AD, CentOS 5, Разрешить?

    Как отказаться от маршрутов, которые загружены сервером OpenVPN?

    Как заставить VLC напрямую играть в iso-файл?

    Предотвратить автозаполнение пути от использования CDPATH в bash?

    Как извлечь значения ресурсов, указанных в директиве PBS, чтобы они могли отображаться в другие переменные среды?

    RX и TX рассчитываются на различных промежуточных интерфейсах между двумя виртуальными машинами

    Expect Script – файл сценария bash не найден

    Необходимо автоматизировать обновление файла crontab

    Преобразование / импорт плоского файла с несколькими записями, по одной переменной на строку

    Как сделать статические маршруты IPv6 постоянными в CentOS?

    С помощью «find /» пропустите каталоги, такие как «/ proc», «/ sys» и аналогичные

    Linux и Unix - лучшая ОС в мире.