我的目标结构如下:
gameplay/ch1_of_182/ajax.googleapis.com/...
gameplay/ch1_of_182/platform.twitter.com/...
gameplay/ch1_of_182/privacy-policy.truste.com/...
gameplay/ch1_of_182/www.facebook.com/...
gameplay/ch1_of_182/www.gameplay.com/...
gameplay/ch1_of_182/www-mega.gameplay.com/...
gameplay/ch2_of_182/ajax.googleapis.com/...
gameplay/ch2_of_182/platform.twitter.com/...
gameplay/ch2_of_182/privacy-policy.truste.com/...
gameplay/ch2_of_182/www.facebook.com/...
gameplay/ch2_of_182/www.gameplay.com/...
gameplay/ch2_of_182/www-mega.gameplay.com/...
...
gameplay/ch182_of_182/ajax.googleapis.com/...
gameplay/ch182_of_182/platform.twitter.com/...
gameplay/ch182_of_182/privacy-policy.truste.com/...
gameplay/ch182_of_182/www.facebook.com/...
gameplay/ch182_of_182/www.gameplay.com/...
gameplay/ch182_of_182/www-mega.gameplay.com/...
使用wget创建。现在我要删除所有目录及其包含的所有文件,除了名称中带有“gameplay.com”的两个目录。
我一直在尝试不同的变体:
find . -mindepth 2 ! -path "*gameplay.com" -prune -exec rm -r {} \;
但没有运气。
从游戏性父目录运行时,不包含“gameplay.com”名称模式的182个目录(实际上仅用于测试目的)中的6个目录中的4个目录及其所有内容都将被删除, 如预期的。虽然包含“gameplay.com”名称模式的2个目录未被删除,但每个目录中包含的所有文件都被删除,这是不好的。
我认为-prune
选项应该让find
知道基本上忽略指定的目录,但是我必须指定错误,因为那不会发生,留下我有两个空目录182个父母的每一个。
我认为与-mindepth
和-prune
选项存在潜在冲突,但是因为我从游戏性父目录运行命令,没有它所有182个子目录,每个目录包含两个目录想要离开,被删除。
我想我可以编写一个for
循环来循环到每个目录,但在我看来find
应该能够在一次犯规中完成这项任务,如果有人不介意脱掉一些如何。
答案 0 :(得分:1)
逻辑上,这是find . -mindepth 2 \( ! -path "*gameplay.com" \) -a \( -prune \) -a \( -exec rm -r {} \; \)
因此,由于您的-prune
位于路径检查之后,如果您的路径检查为false,则永远不会得到它。尝试切换订单。
find . -mindepth 2 -prune ! -path "*gameplay.com" -exec rm -r {} \;