如何使用shell脚本删除除任何一个子目录之外的文件

时间:2015-10-30 10:36:38

标签: shell

您好我想删除除子目录之外的任何子目录中的文件。

前者

folder a->a.txt
folder b->subdir 1 -> msgdir-> a.txt
folder c->

现在我想只删除文件夹a中的a.txt而不删除msgdir中的文件.msgdir可以在任何级别的子目录中删除它。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

这将特别忽略任何级别的msgdir并移除a.txt,但msgdir除外。

find . ! -path '*/msgdir/*' -name a.txt -type f -delete

使用GNU find 4.4.2和BSD find(Mac Yosemite)进行测试。

答案 1 :(得分:0)

如果您使用-path选项进行GNU查找(或更新的BSD),则以下方法过度。否则,请继续阅读...

您还没有指定您正在使用的shell,但如果您有bash,则可以使用以下内容:

find -name a.txt -exec bash -c "[[ '{}' != */msgdir/* ]]" \; -print

这会筛选出包含/msgdir/的路径,因为只有在文件路径不包含字符串时才会通过测试。如果您对结果感到满意,可以将-print更改为-delete

如果没有bash,您可以使用grep来确定匹配:

find -name a.txt -exec sh -c "printf '%s' '{}' | grep -qv '/msgdir/'" \; -print