В общем, с использованием инвертированного поиска шаблона с Grep должен делать эту работу. Как вы не определили какой-либо узор, я бы просто дать вам общий пример кода:
ls -1 | grep -v 'name_of_file_to_keep.txt' | xargs rm -f
В ls -1
списки по одному файлу в строке, так что Grep можно найти построчно. grep -v
- это инвертированный флаг. Таким образом, любая подобранная модель НЕ будет удалена.
Для нескольких файлов, вы можете использовать задать расширенный:
ls -1 | grep -E -v 'not_file1.txt|not_file2.txt' | xargs rm -f
Update после вопроса был обновлен: Я предполагаю, что вы готовы, чтобы удалить все файлы, кроме файлов в текущей папке, которые не заканчиваются .txt
, Так что это должно работать также:
find . -maxdepth 1 -type f -not -name "*.txt" -exec rm -f {} \;
, за исключением которых один или два? –
Вам лучше показать, как выглядят исключения. В противном случае мы сможем дать очень общий ответ. – fedorqui
обновленный вопрос – Bilal