Удалить все файлы, начинающиеся с знака вопроса

23

У меня есть папка, в которой у меня есть около 4k файлов. Некоторые из этих файлов начинаются с буквы aa ?или !символа. Мне нужно удалить их, но я не могу найти выражение, которое сделает это:

rm -f ./?*

просто удаляет все Возможно, я могу использовать grepls, передать его по конвейеру xargsи переместить файлы в другую папку, но я надеялся, что есть правильный способ сделать это. Нужна помощь как по файлам так ?и по !.

recluze
источник

Ответы:

26

Не нужно никаких модных вещей. Просто избегайте, ?чтобы он не считался частью глобуса:

rm -f ./\?*

Это работает и для !:

rm -f ./\!*

Или одним махом:

rm -f ./{\?,\!}*

Обновить

Просто заметил, что вы предлагаете grepна выходе ls. Я хотел обратить ваше внимание на то, что вы не должны анализировать вывод ls

Джозеф Р.
источник
4
@recluze Не глупо; это далеко не очевидно, как это сделать, если вы не знаете о экранировании от подстановочных знаков.
CVn
@recluze Все еще чувствуете себя глупо после 5 голосов на ваш вопрос? :) Кстати, смотрите обновленный ответ.
Джозеф Р.
Спасибо и спасибо :) ... Знал о проблемах в выводе ls, но у моих файлов был определенный шаблон, на который я мог рассчитывать. Тем не менее, полезно знать :)
отшельник
13

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

Использование rm -i *сработало для меня. Если вы не хотите этого делать, вы также можете удалить по inode, как описано на http://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html .

Чтобы найти индекс, используйте:

ls -il

Затем сделайте:

find . -inum [inode-number] -exec rm -i {} \;
Джонатан
источник