我试图从文件夹树中清除一堆临时文件,但不想删除符合某些条件的文件,特别是可执行文件、.tpl 文件,而不是子文件夹“data”。
我在这里看到这个问题
几乎是我正在寻找的,但他们有一个正则表达式,他们试图匹配,而我有一个正则表达式,我不想要匹配。我可以这样做来查找所有不删除的文件:
find . -executable -o -regex '.*\.tpl'
有没有办法反转匹配,就像 -v 对正则表达式所做的那样?
答案1
有没有办法反转匹配,就像 -v 对正则表达式所做的那样?
使用否定( !
):
find . -executable -o ! -regex '.*\.tpl' -exec rm -i {} \+
答案2
对除匹配某些条件的文件之外的所有内容运行命令的一种便捷方法是利用 的-o
短路行为,例如,find -cond1 -cond2 -o -exec command
意味着“如果cond1
然后cond2
不执行任何操作,则执行command
”。
find . -type f -executable -o -name '*.tpl' -o -exec rm -i {} \+
要排除该data
目录,请使用该-prune
操作,这意味着“跳过该目录并且不递归到该目录”。用于-name data
匹配所有名为 的目录data
,或-path ./data
仅在顶层进行匹配。
find . -type f -executable -o \
-name '*.tpl' -o \
-type d -name data -prune -o \
-exec rm -i {} \+
奖励:zsh 中相同。
rm -i -- **/*~*.tpl~data/*(.^*)