Команда оболочки для удаления всех файлов, отличных от файлов .cpp

#shell

#оболочка

Вопрос:

Я хочу удалить все файлы в каталоге, но не .cpp файлы.

Мне нужна какая-то команда, например:

 rm all except .cpp files
 

Ответ №1:

Редактировать

Основываясь на предложении не анализировать ls , вы также можете выполнить цикл самостоятельно:

 for f in *; do if [[ $f != *.cpp ]]; then rm "$f"; fi; done
 

В противном случае может сработать что-то вроде этого:

 ls | grep -v ".cpp$" | xargs rm
 

Если вы хотите сделать это рекурсивно, вы можете использовать:

 find . -type f -not -iname "*.cpp" | xargs rm
 

Ответ №2:

В bash вы можете включить extglob (если вы еще этого не сделали), запустив shopt -s extglob , а затем:

 rm !(*.cpp)
 

(сначала бегите echo !(*.cpp) проверить!)