您好我想删除除子目录之外的任何子目录中的文件。
前者
folder a->a.txt
folder b->subdir 1 -> msgdir-> a.txt
folder c->
现在我想只删除文件夹a中的a.txt而不删除msgdir中的文件.msgdir可以在任何级别的子目录中删除它。
请帮我解决这个问题。
答案 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