如何使用shell脚本删除目录中未以“.c”结尾的文件?

时间:2014-04-04 07:06:10

标签: bash

我试过这样的

find -type f -name '*\.[^c]' -exec rm -f {} \;
find . -type f |grep -v '.*\.c' | xargs rm -f

似乎他们不正确

3 个答案:

答案 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 {} +