2015-06-06 8 views
1

Как удалить каждый файл в текущем каталоге, кроме *.c файлов?Удалить все, кроме * .c

Например, если я делаю rm *.c, он удаляет все файлы .c, но не удаляет другие файлы.

Я просто хочу сделать обратное.

+1

https://stackoverflow.com/questions/216995/how -can-i-use-inverse-or-negative-wildcards-when-pattern-matching-in-a-unix-linu –

ответ

2

Вы можете сделать это с помощью find:

find . -not -name *.c -delete 

версия выше будет удалить все, что не находится в формате *.c из текущего каталога и ниже.

Если вы хотите удалить всех не *.c файлы только в текущем каталоге (и не ниже), вы можете использовать переключатель: -depth 1

find . -depth 1 -not -name *.c -delete 
+0

Спасибо за помощь. На самом деле я хотел использовать 'rm' для этого. Но в любом случае вы в основном ответили на вопрос. Также из ссылки, приведенной Jim в комментариях выше, я увидел, что мы можем использовать 'shopt -s extglob', а затем использовать' rm! (* .c) ', чтобы сделать то же самое. Тогда 'shopt -u extglob', когда мы этого не хотим. Но я думаю, мне нужно начать использовать 'find' more .. – sps

+0

@ shreyans800755 Пожалуйста, прочитайте [this] (http://stackoverflow.com/help/editing) – alfasin