Как рекурсивно удалить все файлы в каталоге, кроме файлов определенного типа и папки?

Предположим, у меня есть каталог, который содержит:

.\Folder\Folder1\exe\a.exe
.\Folder\Folder1\dll\b.dll
.\Folder\Folder1\txt\c.txt
.\Folder\Folder2\exe\a.exe
.\Folder\Folder2\dll\b.dll
.\Folder\Folder2\txt\c.txt
.
.
.

Теперь я хочу рекурсивно удалить из .\Folder\ кроме всех *.txt, чтобы:

.\Folder\Folder1\exe\
.\Folder\Folder1\dll\
.\Folder\Folder1\txt\c.txt
.\Folder\Folder2\exe\
.\Folder\Folder2\dll\
.\Folder\Folder2\txt\c.txt
.
.
.

Может ли кто-нибудь предложить команду для использования rm для выполнения этой работы? Спасибо!

Я старался:

cd .\Folder
shopt -s extglob

рм -рф !("*.txt")

но он удаляет все файлы и каталог внутри .\Folder


rm
person Yip Hon Wai Ethan    schedule 26.07.2019    source источник


Ответы (1)


Все, что я думаю, правильная команда:

rm -vrf ./Folder/Folder*/*/!(*.txt)
person Luyen    schedule 26.07.2019
comment
если просто удалить файл txt, просто используйте: rm -rf ./Folder/Folder*/*/!(*.txt) - person Luyen; 26.07.2019
comment
извините, ответ: rm -vrf ./Folder/Folder*/*/!(*.txt) . Я добавляю опцию -v, чтобы знать, что я удаляю. Различный характер - person Luyen; 31.07.2019