Как удалить файлы, которые не заканчиваются “.c”?

Gstreamer0.10-plugins-bad версия пакета 0.10.22-3 заменяет файл, которые находятся также в gstreamer0.10-plugins-really-bad версии 0.10.22-0.1. Это, кажется, ошибка, что это не работает здесь ни без каких ошибок (см. здесь для получения дополнительной информации). Но если Вы смешаете версии от различных дистрибутивов, то ясная процедура обновления не гарантируется.

Для решения проблемы просто удалите gstreamer0.10-plugins-really-bad пакет, при помощи aptitude purge gstreamer0.10-plugins-really-bad или apt-get remove --purge gstreamer0.10-plugins-really-bad.

5
05.04.2013, 02:35
3 ответа

Можно использовать -delete флаг find (первый тест с -ls)

find -not -name "*.c" -delete

Если Вы не хотите использовать find, но только файлы в текущем каталоге, Вы могли сделать

rm !(*.c)

Удостоверьтесь в bash это с shopt -s extglob корректный globbing установлен. Кроме того, если у Вас есть набор globstar (shopt -s globstar), можно действовать рекурсивно (для bash версии выше 4):

rm **/!(*.c)
21
27.01.2020, 20:31
  • 1
    Может также добавить -maxdepth 1 к находке для остановки рекурсии. –  Flup 04.04.2013, 15:56
  • 2
    даже это работает. уберите и простой!! Попытка –  Pranit Bauva 04.04.2013, 16:05
  • 3
    -delete не является портативным, если это имеет значение, можно использовать -exec rm вместо этого. –  Chris Down 08.04.2013, 05:12
  • 4
    Если rm !(*.c) генерирует event not found в ударе это должно быть продолжено с shopt -s extglob. –  kenorb 14.03.2015, 20:48
  • 5
    Как обычно, рекомендация первому показу без -delete для проверки Вы не сделали никого потенциально disastroud ошибкой. –  Shadur 01.06.2016, 10:41

Я всегда предварительный друг find в таких случаях. У Вас нет беспокойства о специальных именах файлов, и можно обработать различные типы файлов. Если Вам нравится удалять файлы только, необходимо добавить -type f к Вашим опциям. Таким образом, мое любимое решение:

find -not -name "*.c" -type f -delete

Но будьте осторожны. Тестирование таких команд всегда является хорошей идеей.

5
27.01.2020, 20:31

Активируйтесь ksh расширил подстановочные шаблоны с помощью команды shopt -s extglob (можно вставить это Ваш ~/.bashrc). Затем шаблон !(*.c) соответствия все файлы в текущем каталоге кроме тех то соответствие *.c:

rm !(*.c)

Это довольно опасно, как это удаляет .txt файлы, .h файлы, и т.д. Менее решительная команда была бы

rm !(*.*) *.o

Это все еще удаляет README, Makefile, и т.д. Необходимо, возможно, только удалить исполняемые файлы:

find . -type d -prune -o -type f -perm -100 -exec rm {} +

Короче, если Ваш find поддержки это:

find . -maxdepth 1 -type f -perm -100 -delete
4
27.01.2020, 20:31

Теги

Похожие вопросы