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

Это очень простой вопрос, и я не знаю, существует ли решение или нет.

У меня есть несколько файлов в каталоге, предположим, у меня есть .py и некоторые другие файлы расширения. Теперь я хотел бы удалить все файлы, кроме тех, которые заканчиваются на .py файлах. Как я могу сделать это с помощью команды rm ?

То есть я хочу что-то вроде

!(rm *.py) 

Является ли это возможным?

4 ответа4

7
shopt -s extglob
rm !(*.py)

Вы включаете переменную extglob. Это дает вам некоторые дополнительные функции сопоставления с образцом, особенно отрицание.

Вы можете снова отключить его с помощью shopt -u extglob .

4

Легко запомнить это найти:

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

Он также удалит файлы в подкаталогах по сравнению с решением larsmas, но вы можете предотвратить это с помощью параметра -maxdepth.

Не каждая реализация find может поддерживать опцию delete . Gnu find делает начиная с версии 4.2.3.

2

Предполагая, что вы используете Bash:

shopt -s extglob
mv !(*.py) some_dir
2
ls | grep -v ".py$" | xargs rm

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .