我试过这样的
find -type f -name '*\.[^c]' -exec rm -f {} \;
find . -type f |grep -v '.*\.c' | xargs rm -f
似乎他们不正确
答案 0 :(得分:4)
尝试使用!
否定您的姓名搜索。
find -type f ! -name '*\.c' -exec rm -f {} \;
答案 1 :(得分:2)
使用删除命令尝试此操作:
find -not -name "*.c" -type f -delete
答案 2 :(得分:2)
对于角色的否定,!
而不是^
与模式匹配。
-name '*.[!c]'
但这不正确,因为这需要任何名称以点和.
以外的单个字符结尾
如果您使用正则表达式,则需要使用锚点($):
grep -v '\.c$'
但是使用'grep'和xargs这种方式对于带有空格或特殊字符的文件名将无法正常工作..
因此,如果您尝试删除当前目录中的文件及其所有子目录,请尝试:
find . -type f ! -name "*.c" -exec rm -f {} +