Вопрос: Команда rm: удалять файлы с именами файлов, содержащими скобки


Я пытаюсь удалить все файлы в каталоге Windows 7 с именами файлов, содержащими скобки; ( а также ):

Использование MinGW:

rm *(*)*

Я получаю сообщение об ошибке:

sh: syntax error near unexpected token '('

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


2
2017-10-08 09:11


Источник




Ответы:


Вы можете «избежать» определенных метасимволов путем префикса с обратной косой чертой.

$ touch 'aaa(bbb)ccc'
$ rm *\(*\)*
$ ls
$

3
2017-10-08 09:35



rm '*(*)*' дает мне rm: cannot lstat * ()': Данный файл или каталог отсутствует. rm * (*) * `работает (но также хочет удалить каталоги с этим совпадением, но это то, чего хочет оригинал OP, давая строку ошибок). - Rik
Использование котировок не помогло мне. Однако обратный слэш побега. @Rik - Извинения - я не был конкретным. В директории, на которую я смотрю, нет подкаталогов. - atomh33ls
@RedGrittyBrick Первый метод только работает над один файл с именем *(*)*, но OP хочет работать все файлы содержащий  ( а также ), Попробуйте сами touch 'a(b)c', затем rm '*(*)*' не работает все эти файлы. Также не в bash на Linux! rm *\(*\)* работает как с Linux, так и с mingw. - Rik
@Rik: Спасибо, я знал об этом (вот почему я упомянул «все метасимволы»), - но, может быть, это путано включить это в этот ответ - я удалю его. - RedGrittyBrick


Вы можете сделать следующее:

find . -type f -name "*(*)*" -delete -maxdepth 1

Для тестирования я использовал бы -print аргумент первый:

find . -type f -name "*(*)*" -print -maxdepth 1

Если вы хотите сделать это во всех подкаталогах, вы можете опустить -maxdepth 1

Если -delete не работает, вы можете попробовать:

find . -type f -name "*(*)*" -exec rm -rf {} \;

Редактировать: Включено -type f делать это только в файлах (а не в каталогах) так же, как в rm,


3
2017-10-08 09:26