【发布时间】:2015-10-07 18:54:01
【问题描述】:
我有大约 10 个文件夹,我试图在这些文件夹下只保留几个子文件夹并删除其余的。
例子:我有
A/1 A2 A/3 A/4 乙/1 B/4 B/5 B/6我试图在每个父文件夹 A 和 B 下只保留文件夹 1 和 4。我正在使用 find -type d -name 2 -exec rm -rf {} \; 查找和删除每个文件夹。
是否有任何 unix 命令只保留文件夹 1 和 4 并删除其余的?
【问题讨论】:
我有大约 10 个文件夹,我试图在这些文件夹下只保留几个子文件夹并删除其余的。
例子:我有
A/1 A2 A/3 A/4 乙/1 B/4 B/5 B/6我试图在每个父文件夹 A 和 B 下只保留文件夹 1 和 4。我正在使用 find -type d -name 2 -exec rm -rf {} \; 查找和删除每个文件夹。
是否有任何 unix 命令只保留文件夹 1 和 4 并删除其余的?
【问题讨论】:
告诉 find 你在找什么;
find . -mindepth 2 -type d -name "[^14]" -exec rm -rf {} \;
排除目录 1 和 4,在子级别,找到其他目录并删除它们。
【讨论】:
AIG 的排除想法可能是正确的,但使用 find 排除的方法是使用 -o(或)运算符,如果前面的内容为真则停止,否则继续:
find . -mindepth 2 -type d -name 1 -o -name 4 -o -exec rm -rf {} +
【讨论】:
我相信这适用于 posix 兼容系统:
find . -type d -links 2 \! \( \( -name 1 \) -o \( -name 4 \) \) -exec rm -rf {} \;
这仅包括子目录,不包括名为 1 或 4 的目录。
【讨论】:
只使用 glob
$ rm -rf [AB]/[^14]
【讨论】: